如何查找不存在指定列值的记录?以无Type=A的Accountid为例
查找无Type=A记录的Accountid的SQL方案
要找出所有不存在Type = 'A'记录的Accountid对应的全部行数据,以下是几种高效的SQL实现方式:
方法1:使用NOT EXISTS子查询
这是最直观且性能优异的方案,通过子查询校验当前Accountid是否存在Type='A'的记录:
SELECT t1.* FROM your_table t1 WHERE NOT EXISTS ( SELECT 1 FROM your_table t2 WHERE t2.Accountid = t1.Accountid AND t2.Type = 'A' );
方法2:使用LEFT JOIN + IS NULL
通过自连接筛选未匹配到Type='A'的记录:
SELECT t1.* FROM your_table t1 LEFT JOIN your_table t2 ON t1.Accountid = t2.Accountid AND t2.Type = 'A' WHERE t2.Accountid IS NULL;
方法3:分组统计筛选
先分组统计每个Accountid下Type='A'的记录数,再关联原表获取目标行:
SELECT t.* FROM your_table t INNER JOIN ( SELECT Accountid FROM your_table GROUP BY Accountid HAVING SUM(CASE WHEN Type = 'A' THEN 1 ELSE 0 END) = 0 ) sub ON t.Accountid = sub.Accountid;
结果验证
针对示例数据表执行以上任意查询,都会得到预期结果:
| Accountid | Subid | Type |
|---|---|---|
| 003 | 15 | B |
| 003 | 16 | C |
内容的提问来源于stack exchange,提问作者Sal Kuk
相关产品推荐
相关产品推荐

