我有两个表“客户”和“广告系列”:
customers
-------------
id | int
-------------
name | varchar
campaigns
----------------------
id | int
----------------------
customers_id | int
----------------------
name | varchar
客户可以拥有多个广告系列。两个表之间的关联是通过campaigns.customers_id = customers.id
。
现在,我希望所有获得名为“A”且名称为“B”的广告系列的客户。
我尝试使用JOIN
语句IN
,但它会返回已收到广告系列“A”或“B”的所有客户:
SELECT
customers.name
FROM
customers
JOIN
campaigns
ON
customers.id=campaigns.customers_id
WHERE
campaigns.name IN('A','B')
非常感谢!
答案 0 :(得分:1)
您已使用customers.id=campaigns.id
而不是customers.id=campaigns.customers_id
加入广告系列表。
正确的查询是
SELECT
customers.name
FROM
customers
JOIN
campaigns
ON
customers.id=campaigns.customers_id
WHERE
campaigns.name IN('A','B')
这应该有效:)
答案 1 :(得分:0)
您需要加入每个广告系列
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'
现在将包含已同时收到这两者的客户。
答案 2 :(得分:0)
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'
通过第一次LEFT JOIN,您将获得包含广告系列且广告系列名称为“A”的客户,然后结果将与名为“B”的广告系列一起加入。
只会选择campaign.name = A
和campaign.name = B
的行。