连接数据上的MySQL条件

连接数据上的MySQL条件,mysql,select,join,Mysql,Select,Join,我有两张表,分别是客户和活动: customers ------------- id | int ------------- name | varchar campaigns ---------------------- id | int ---------------------- customers_id | int ---------------------- na

我有两张表,分别是客户和活动:

    customers
    -------------
    id   | int
    -------------
    name | varchar 


    campaigns
    ----------------------
    id           | int
    ----------------------
    customers_id | int
    ----------------------
    name         | varchar
一个客户可以有多个活动。这两个表之间的关联是通过活动.customers\u id=customers.id实现的。 现在,我想让所有已获得名为A和名为B的活动的客户

我尝试使用IN语句进行连接,但它会返回所有已收到任何活动a或B的客户:

    SELECT
      customers.name
    FROM
      customers
    JOIN
      campaigns
    ON
      customers.id=campaigns.customers_id
    WHERE
      campaigns.name IN('A','B')

非常感谢

您需要参加每个活动

SELECT
  customers.name
FROM
  customers
INNER JOIN campaigns c1 ON customers.id=c1.id and c1.name = 'A'
INNER JOIN campaigns c2 ON customers.id=c2.id and c2.name = 'B'
现在将包含同时收到这两种服务的客户

SELECT
  customers.name
FROM
  customers
LEFT JOIN campaigns c1 ON customers.id=c1.customers_id and c1.name = 'A'
LEFT JOIN campaigns c2 ON customers.id=c2.customers_id and c2.name = 'B'
在第一次左键联接中,您将获得具有活动且活动名称为“A”的客户,然后结果将与名称为“B”的活动联接


只有campaign.name=A和campaign.name=B的行将被选择。

您已使用customers.id=campaims.id而不是customers.id=campaims.customers\u id加入了活动表

正确的查询是

SELECT
      customers.name
    FROM
      customers
    JOIN
      campaigns
    ON
      customers.id=campaigns.customers_id
    WHERE
      campaigns.name IN('A','B')

这应该有效:

您加入了错误的列。而且分组方式。。。让count*=n-其中n是假定客户中的项目数,活动是唯一的:感谢您指出列名。你说得对,编辑了我的问题。是的,很好的更新,但不仅仅是写查询,它更好地帮助人们知道你做了什么以及为什么做了什么。也许可以通过左连接来澄清为什么双重连接以及为什么您的原始答案不正确。只是得到答案的人不会学习,也不会成为脚本复制者。只是建设性的批评。。。我很早就开始了简单的回答。这个解决方案不是很好扩展。对不起,这是我问题中的一个输入错误。我加入了正确的专栏,使用IN可以为我提供所有有活动A或B的客户,但我希望所有同时拥有这两个活动的客户。请选择customers.name FROM customers加入客户上的活动。id=campaigns.customerid其中campaigns.name类似于“A”或campaigns.name类似于“B”按客户分组。id;我不知道为什么这个答案被否决了。谁能给我解释一下吗?谢谢你的回答!不知道投票结果如何。当我将左连接更改为内部连接时,它将返回预期的结果。