SQL需求:count返回0时执行另一表查询,现有SQL异常求助
解决方案
你的核心需求是:仅当table1的目标查询计数为0时,才返回table2的计数结果;否则只返回table1的计数。原SQL使用UNION ALL会无条件执行两个查询,且NOT EXISTS的条件逻辑与需求不符,导致table2查询未按预期生效。
以下是两种可行的修正写法:
写法一:单结果返回(直接输出符合条件的计数)
SELECT CASE WHEN (SELECT COUNT(*) FROM table1 WHERE condition1 = 'answer1' AND time >= sysdate - interval '5' minute) = 0 THEN (SELECT COUNT(*) FROM table2 WHERE condition2 = 'answer2') ELSE (SELECT COUNT(*) FROM table1 WHERE condition1 = 'answer1' AND time >= sysdate - interval '5' minute) END AS total_count
这种写法会先判断table1的目标数据量是否为0,再决定返回对应表的计数,最终只输出一行结果。
写法二:区分来源的结果返回
如果需要明确显示数据来自哪个表,可以用这种方式,table1有数据时只显示table1的行,无数据时显示table2的行:
SELECT COUNT(*) AS count_num, 'table1' AS data_source FROM table1 WHERE condition1 = 'answer1' AND time >= sysdate - interval '5' minute UNION ALL SELECT COUNT(*) AS count_num, 'table2' AS data_source FROM table2 WHERE condition2 = 'answer2' AND (SELECT COUNT(*) FROM table1 WHERE condition1 = 'answer1' AND time >= sysdate - interval '5' minute) = 0
原SQL问题说明
UNION ALL会无条件合并两个查询结果,不管table1是否有数据,都会执行table2的查询,违背了你的需求逻辑;- 原
NOT EXISTS子查询中的condition = 'answer'与table1主查询的condition1 = 'answer1'条件不一致,可能导致判断逻辑错误,无法正确触发table2的查询。
内容的提问来源于stack exchange,提问作者user20379585
相关产品推荐
相关产品推荐

