在连接两个表的内容时遇到一些麻烦。我想要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
答案 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;