sql - 选择不在集合中的不同记录
问题描述
我有一张客户表,上面有他们的客户联系方式。
可以通过以下三种方式之一联系客户:
- 电话(1)
- 短信(2)
- 电子邮件(3)
FK id 在括号中。
如果我想为 SMS 和电子邮件提取不同客户 ID 的列表,我可以执行以下操作:
SELECT DISTINCT customer_id
FROM contact_options
WHERE contact_option_type_id IN (2,3)
但是我该如何做相反的事情呢?假设我想要一个 ( DISTINCT
) 没有电话联系人的客户列表。我可以在不使用子查询的情况下做到这一点吗?
我意识到这个例子是人为的,实际上我有很多不同的联系方式(大约 80 个)。
解决方案
一种选择是使用聚合:
SELECT customer_id
FROM contact_options
GROUP BY customer_id
HAVING SUM(CASE WHEN contact_option_type_id = 1 THEN 1 ELSE 0 END) = 0;
我们也可以尝试使用EXISTS
:
SELECT DISTINCT customer_id
FROM contact_options c1
WHERE NOT EXISTS (SELECT 1 FROM contact_options c2
WHERE c1.customer_id = c2.customer_id AND c2.contact_option_type_id = 1);
推荐阅读
- node.js - 如何使用 exe 构建读取电子中的外部文件
- flutter - 在 Flutter 中存储缓存
- debugging - gdb 无法在 gdbserver (Rust x64) 上运行“elf64-x86-64”格式
- python - Discord py如何获取消息的作者并在dm中回复?
- c++ - 行时间列不是标量,具有自定义标量类型
- python - 发生异常:ValueError
- python - Process list with Dataframe Typ
- ansible - 如何使用 Ansible 获取系统状态
- jquery - 在 Devexpress 网格视图中单击后如何隐藏新按钮
- nginx - 如何配置具有相同证书和相同域的 nginx 以代理不同的应用程序