没有记录然后错误的情况(postgresql)

Case when no record then error (postgresql)

正在努力解决一个简单的问题,但找不到解决方案。

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'

提前感谢您提供任何线索!

如果没有符合条件的行,则没有任何内容 returned 并且您不能计算它。

至 return 有关在条件中使用但在数据库中不存在的值的信息,您通常在值列表上使用外部联接:

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') 查询,它还 return 列出 in 列表中不存在于 table 中的那些值。

这可以用来识别缺失值:

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;