如何查询不存在emailTypeId=8的id记录?
解决方法:检索未关联emailTypeId=8的id
数据表格
| id | emailTypeId |
|---|---|
| 1 | 5 |
| 1 | 6 |
| 1 | 8 |
| 2 | 8 |
| 3 | 5 |
| 3 | 6 |
| 4 | 6 |
你提到的select distinct id from table where emailTypeId <> 8无法得到正确结果,是因为只要id存在非8的记录就会被返回,哪怕它同时有8的记录。下面是几种能正确获取目标id的SQL写法:
方案1:NOT EXISTS子查询
SELECT DISTINCT id FROM your_table t1 WHERE NOT EXISTS ( SELECT 1 FROM your_table t2 WHERE t2.id = t1.id AND t2.emailTypeId = 8 );
核心逻辑:逐个检查每个id,确认该id没有任何emailTypeId=8的关联记录。
方案2:LEFT JOIN + 空值过滤
SELECT DISTINCT t1.id FROM your_table t1 LEFT JOIN your_table t2 ON t1.id = t2.id AND t2.emailTypeId = 8 WHERE t2.id IS NULL;
核心逻辑:将表与自身按id关联,只匹配emailTypeId=8的记录,左连接后NULL的结果就是没有匹配到8的id。
方案3:GROUP BY + HAVING统计
SELECT id FROM your_table GROUP BY id HAVING SUM(CASE WHEN emailTypeId = 8 THEN 1 ELSE 0 END) = 0;
核心逻辑:按id分组后,统计每组中emailTypeId=8的记录数,数量为0的id就是目标结果。
内容的提问来源于stack exchange,提问作者Surya
相关产品推荐
相关产品推荐

