然后在 postgresql 中无法按预期工作的情况(在 null 值上)

Case when then in postgresql doesn't work as expected (on null value)

提问人:Emilio Galarraga 提问时间:12/7/2022 更新时间:12/7/2022 访问量:403

问:

我有一张桌子叫人

编号 名字 姓氏
1 John 史密斯
2 罗伯特 威廉姆斯
3 彼得 沃克

如果我运行查询

select CASE WHEN id is null THEN '0' ELSE id END as id
from people 
where id='2'

结果是: |编号 |---- |2

我想在表中为 Null 时将 id 显示为 0,但是当我运行

select CASE WHEN id is null THEN '0' ELSE id END as id
from people 
where id='4'
编号

我的预期结果是: |编号 |---- |0

PostgreSQL 大小写

评论


答:

4赞 histocrat 12/7/2022 #1

与任何行都不匹配的顶级 SQL 查询将返回零行,这与返回 NULL 不同。这是有道理的,因为它可以区分没有此类用户时的结果和有用户但其电子邮件为 null 时的结果。SELECT email FROM users WHERE id=4

但是,不返回任何行的子查询将按照预期的方式计算为 NULL。因此,您可以像这样重写代码:

SELECT COALESCE( (SELECT id FROM people WHERE id = '4'), 0 );

COALESCE(x,y)是 的简写。在这样的情况下,它很有帮助,因为 x 的表达式很长,而且你不想写两次。CASE WHEN x IS NULL THEN y ELSE x END