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

时间:2015-07-13 13:12:12

标签: postgresql-9.1

遇到一个简单的问题并找不到解决办法。

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'

提前感谢任何线索!

1 个答案:

答案 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;