[英]MySQL condition on joined data
我有兩個表“ customers”和“ campaigns”:
customers
-------------
id | int
-------------
name | varchar
campaigns
----------------------
id | int
----------------------
customers_id | int
----------------------
name | varchar
一個客戶可以有多個廣告系列。 這兩個表之間的關聯是通過campaigns.customers_id = customers.id
。 現在,我要獲取所有已獲得廣告系列的名稱為“ A”和名稱為“ B”的客戶。
我嘗試了一個帶有IN
語句的JOIN
,但它返回了已收到廣告系列“ A”或“ B”中任何一個的所有客戶:
SELECT
customers.name
FROM
customers
JOIN
campaigns
ON
customers.id=campaigns.customers_id
WHERE
campaigns.name IN('A','B')
非常感謝!
您已使用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')
這應該工作:)
您需要為每個廣告系列加入
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'
通過第一個LEFT JOIN,您將獲得具有廣告系列且名稱為“ A”的客戶,然后結果將與名稱為“ B”的廣告系列合並。
僅選擇campaign.name = A
和campaign.name = B
的行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.