SQL (MariaDB):Remove/ignore 来自生成的结果,如果单个实例为真

SQL (MariaDB): Remove/ignore from generated results if a single instance is true

我有 table 个客户 ID 和响应 ID:

   customer_id    campaign_id
   20             8
   152            9
   1575           9
   57898          9
   152            10
   1575           10
   888            10

我将再次为营销活动 10 生成另一个客户列表,但我需要删除已对营销活动 10 做出响应的客户 ID,非常简单:

Table:

SELECT customer_id FROM responses WHERE campaign_id <> 10

结果:

customer_id
20
152
1575
57898

但是我的问题是,如果您注意到客户 152 和 1575 响应了活动 9,那么上述查询仍将包括客户,因为他们对活动 9 的响应是不等于 10.

查询需要生成客户 ID 列表,但 remove/ignore 完全等于广告系列 10 的客户 ID。如果我在广告系列 10 上生成并且他们在广告系列 10 上做出了响应,那么他们是否在广告系列 8、9、200 等上做出了响应并不重要,他们将不被包括在内。

我想要的结果:

customer_id
20
57898

我曾尝试生成响应 table 为 NULL FROM responses WHERE customer_id IS NULL 的客户,但是由此产生了问题,因为这是活动 10,customer_id 20 and/or 57898 可能技术上允许被包括在内,因为他们没有收到活动 10 的回复。

我希望这是有道理的,感谢您的帮助。

您可以加​​入相同的 table 排除条件并按 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 example

在这种情况下,如果您的联接找到某些内容,那么子查询 customer_id 将不为空