我有一个客户id和响应id的表:
customer_id campaign_id
20 8
152 9
1575 9
57898 9
152 10
1575 10
888 10
我将再次为活动10生成另一个客户列表,但我需要删除已经在活动10上响应的客户ID,这很简单:
表:
SELECT customer_id FROM responses WHERE campaign_id <> 10
结果:
customer_id
20
152
1575
57898
然而,我的问题是,如果您注意到客户152和1575也对活动9做出了响应,因此上述查询仍将包括客户,因为他们对活动9的响应不等于10。
查询需要生成一个客户ID列表,但删除/忽略完全等于活动10的客户ID。如果我在第10次竞选中产生,而他们在第10轮竞选中做出了回应,那么他们是否在第8轮、第9200轮竞选中作出了回应也没关系,他们不会被包括在内。
我想要的结果:
customer_id
20
57898
我曾尝试生成响应表为NULLFROM responses WHERE customer_id IS NULL
的客户,但由于这是活动10,因此出现了问题,从技术上讲,可以允许包括customer_id 20和/或57898,因为他们没有收到活动10的响应。
我希望这是有意义的,谢谢你的帮助。
您可以通过cutomer_id加入具有排除条件和组的同一个表,如
SELECT res.customer_id FROM responses res
LEFT JOIN (
SELECT customer_id FROM responses WHERE campaign_id = 10
) sub ON sub.customer_id = res.customer_id
WHERE sub.customer_id is null
GROUP BY res.customer_id
SQL Fiddle示例
在这种情况下,如果您的加入找到了什么,那么子查询customer_id将不是空