SQL(MariaDB):如果单个实例为true,则从生成的结果中删除/忽略



我有一个客户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将不是空

最新更新