SQL查询需求:仅返回所有同ext行中nr全为NULL的ext
嘿,这个需求我太熟了!要找出那些所有对应行的nr字段全是NULL的ext,其实有好几种靠谱的写法,我给你列出来:
方法1:GROUP BY + HAVING(最直观的写法)
利用COUNT()函数不会统计NULL值的特性,对ext分组后,只要某个分组的非NULL nr数量为0,就说明这个ext的所有行nr都是NULL:
SELECT ext FROM your_table_name GROUP BY ext HAVING COUNT(nr) = 0;
方法2:NOT EXISTS(大表场景可能更高效)
思路反过来:直接筛选那些不存在任何非NULL nr记录的ext,用NOT EXISTS排除掉有非NULL值的ext,最后用DISTINCT去重:
SELECT DISTINCT ext FROM your_table_name t1 WHERE NOT EXISTS ( SELECT 1 FROM your_table_name t2 WHERE t2.ext = t1.ext AND t2.nr IS NOT NULL );
方法3:LEFT JOIN 排除法
通过左连接匹配出有非NULL nr的ext,然后筛选那些没匹配到的行(也就是关联表字段为NULL的情况):
SELECT DISTINCT t1.ext FROM your_table_name t1 LEFT JOIN your_table_name t2 ON t1.ext = t2.ext AND t2.nr IS NOT NULL WHERE t2.id IS NULL;
小提示:记得把代码里的your_table_name替换成你实际使用的表名哦!
内容的提问来源于stack exchange,提问作者Art
相关产品推荐
相关产品推荐

