Oracle中按条件检查值存在?添加列后查询无结果求解
问题原因及解决方案
核心原因
当WHERE条件没有匹配到任何行时,GROUP BY子句无法生成任何分组,因此整个查询不会返回任何结果。而你最初的SELECT COUNT(1)查询没有GROUP BY,数据库会自动将整个结果集视为一个分组,即使没有匹配行,也会返回一行COUNT(1)=0的结果。
解决方法
方法1:用聚合函数包裹mycolumn2
把mycolumn2用聚合函数(比如MAX()、MIN())包裹,这样即使没有匹配行,聚合函数会返回NULL,同时COUNT(1)返回0:
SELECT COUNT(1), MAX(mycolumn2) AS mycolumn2 FROM my_Table WHERE mycolumn1 = 'BJS' AND mycolumn2 = '100000'
如果需要把NULL替换成更直观的提示,可结合COALESCE:
SELECT COUNT(1), COALESCE(MAX(mycolumn2), '不存在') AS mycolumn2 FROM my_Table WHERE mycolumn1 = 'BJS' AND mycolumn2 = '100000'
方法2:子查询结合条件判断
先通过子查询获取计数,再根据计数返回对应的值:
SELECT cnt, CASE WHEN cnt > 0 THEN '100000' ELSE '不存在' END AS mycolumn2 FROM ( SELECT COUNT(1) AS cnt FROM my_Table WHERE mycolumn1 = 'BJS' AND mycolumn2 = '100000' ) t
方法3:UNION ALL拼接两种结果
手动拼接存在和不存在的情况,确保查询始终返回一行结果:
SELECT COUNT(1) AS cnt, mycolumn2 FROM my_Table WHERE mycolumn1 = 'BJS' AND mycolumn2 = '100000' GROUP BY mycolumn2 UNION ALL SELECT 0, '不存在' WHERE NOT EXISTS ( SELECT 1 FROM my_Table WHERE mycolumn1 = 'BJS' AND mycolumn2 = '100000' )
内容的提问来源于stack exchange,提问作者Ben khelifa amine
相关产品推荐
相关产品推荐

