提问人:Emilio Galarraga 提问时间:12/7/2022 更新时间:12/7/2022 访问量:403
然后在 postgresql 中无法按预期工作的情况(在 null 值上)
Case when then in postgresql doesn't work as expected (on null value)
问:
我有一张桌子叫人
编号 | 名字 | 姓氏 |
---|---|---|
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
答:
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
评论