如何查询表中无对应列B为NULL值的列A的所有取值?
实现方案
你可以用以下两种SQL实现需求,两种写法均可以正确返回不存在B为NULL的异常A取值,可根据你的表索引情况选择性能更优的方案,表名请替换为你实际的表名:
方案1:分组聚合写法
适合不需要额外索引的全表扫描场景:
SELECT A FROM your_table GROUP BY A HAVING COUNT(B) = COUNT(*)
逻辑说明:COUNT(B)统计时会自动忽略B为NULL的行,COUNT(*)会统计分组内所有行数,二者相等说明该A分组下没有B为NULL的行,即为你需要的异常数据。
你也可以用更直观的条件替换HAVING子句:
HAVING SUM(CASE WHEN B IS NULL THEN 1 ELSE 0 END) = 0
方案2:NOT EXISTS写法
如果A列建有索引,该方案性能会明显优于分组写法:
SELECT DISTINCT t1.A FROM your_table t1 WHERE NOT EXISTS ( SELECT 1 FROM your_table t2 WHERE t2.A = t1.A AND t2.B IS NULL )
以上两种写法针对你给出的示例数据,都会返回结果d,符合需求。
内容的提问来源于stack exchange,提问作者user2309462
相关产品推荐
相关产品推荐

