遇到一个简单的问题并找不到解决办法。
https://ideone.com/Hisu8H(sqlfiddle mini)应该是两行,但只显示一个OK。
如果有记录,应该有一个OK结果。如果没有记录,那么应该有ERROR结果。
SELECT
CASE WHEN (SELECT count(*) from code)=0 THEN 'ERROR' else 'OK' end
FROM code
WHERE "CODE_ID"='EXISTS'
问题在于,如果CODE_ID存在,则会有一行OK,但如果缺少记录,则根本不会提取任何行。
在一个简单的查询中,这是有效的。但不是条件!
SELECT COALESCE(count(*), 0) FROM code
WHERE "CODE_ID"='ERROR'
提前感谢任何线索!
答案 0 :(得分:0)
如果没有符合条件的行,则不会返回任何内容,您无法对其进行计数。
要返回有关条件中使用但在数据库中不存在的值的信息,通常在值列表中使用外部联接:
select t.id,
code.code_id
from (
values ('error'), ('test')
) as t (id)
left join code on code.code_id = t.id;
这个本质上是一个where code_id in ('error', 'test')
查询,它还返回表中不存在的in
列表中的那些值。
然后可以使用它来识别缺失值:
select t.id,
case when code.code_id is null then 'Error' else 'OK' end as status
from (
values ('error'), ('test')
) as t (id)
left join code on code.code_id = t.id;