SQL查询:如何过滤名下存在Type=Z记录的所有同名数据?
实现方案
假设你的表名为user_type,可替换为实际表名,以下是几种常用的SQL写法:
1. 推荐写法:NOT EXISTS(性能最优,兼容所有SQL方言)
如果仅需要返回去重后的符合要求的Name:
SELECT DISTINCT Name FROM user_type t1 WHERE NOT EXISTS ( SELECT 1 FROM user_type t2 WHERE t2.Name = t1.Name AND t2.Type = 'Z' );
如果需要返回符合要求的Name的全部原始记录,去掉DISTINCT即可:
SELECT Name, Type FROM user_type t1 WHERE NOT EXISTS ( SELECT 1 FROM user_type t2 WHERE t2.Name = t1.Name AND t2.Type = 'Z' );
2. 简洁写法:NOT IN(仅适用于Name字段无NULL值的场景)
SELECT DISTINCT Name FROM user_type WHERE Name NOT IN ( SELECT Name FROM user_type WHERE Type = 'Z' );
3. 聚合写法:GROUP BY + HAVING(适合需要同步统计其他指标的场景)
SELECT Name FROM user_type GROUP BY Name HAVING COUNT(CASE WHEN Type = 'Z' THEN 1 END) = 0;
内容的提问来源于stack exchange,提问作者Logan Price
相关产品推荐
相关产品推荐

