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
在这种情况下,如果您的联接找到某些内容,那么子查询 customer_id 将不为空
我有 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
在这种情况下,如果您的联接找到某些内容,那么子查询 customer_id 将不为空