如何在PostgreSQL中返回0而不是NULL?

时间:2019-01-24 06:46:42

标签: postgresql

在连接两个表的内容时遇到一些麻烦。我想要0而不是NULL的结果。 这是当前情况:

表1

Name    v1       v2
A       1         2
B       5         3
C       8         4

table2

Name    v3       v4    Id
B       8        12    1
B       7        22    3
C       6         4    2

结果

Name    v3       v4 
A       NULL     NULL
B       8        12
C       NULL     NULL

预期结果

Name    v3       v4 
A        0        0
B        8       12
C        0        0

我已经尝试了以下方法来获得结果:

select t1.Name,
    (select coalesce(v3,0) from table2 where Name = t1.Name and id =1),    
    (select coalesce(v4,0) from table2 where Name= t1.Name and id =1)
from table1 t1

1 个答案:

答案 0 :(得分:3)

您必须在子查询之外使用coalesce

select t1.Name,
       coalesce((select v3 from table2 where Name= t1.Name and id = 1), 0),
       coalesce((select v4 from table2 where Name= t1.Name and id = 1), 0)
  from table1 t1

或更妙的是,使用左联接代替相关子查询(值列表中的相关子查询在比小表大的情况下应该很慢)。

select t1.name, coalesce(t2.v3, 0), coalesce(t2.v4, 0)
  from table1 t1 
       left join table2 t2 on t1.name = t2.name and t2.id = 1;