没有找到值时返回null或0

时间:2014-05-08 10:45:03

标签: sql sql-server tsql

declare @t1 table (ID char(3) not null,Name char(5) not null)
insert into @t1(ID,  Name) values
('ID1','Test1'),
('ID2','Test2'),
('ID3','Test3')


declare @t2 table (ID char(3) not null)
insert into @t2(ID) values
('ID1'),
('ID2'),
('ID3'),
('ID4'),
('ID5')

SELECT id, name from @t1
WHERE id in (SELECT id from @t2)

返回:

id  name
ID1 Test1
ID2 Test2
ID3 Test3

我怎样才能让这段代码将ID4和ID5的值返回为零或零(理想情况下为零)?像这样:

id  name
ID1 Test1
ID2 Test2
ID3 Test3
ID4 NULL
ID5 NULL

使用提供的解决方案,我使用ISNULL返回0而不是NULL。

4 个答案:

答案 0 :(得分:1)

您需要LEFT OUTER JOIN

SELECT @t2.id, @t1.name from @t2 LEFT OUTER JOIN @t1 ON @t1.ID = @t2.ID

INNER JOIN相对,OUTER JOIN将从源表中获取所有行,而不仅仅是连接表中也存在的行。

答案 1 :(得分:0)

SELECT @t2.id, @t1.name 
from @t2
left join @t1 on @t1.id = @t2.id

答案 2 :(得分:0)

SELECT aa.id,
       b1.name
from @t2 aa
LEFT JOIN @t1 b1 ON(aa.ID=b1.id)

答案 3 :(得分:-1)

使用COALESCE

SELECT t1.id, COALESCE(t1.name, 0) 
FROM @t1 t1
LEFT OUTER JOIN @t2 t2
ON t2.id = t1.id

COALESCE将返回参数列表中的第一个非null值,因此如果t1.name出现为NULL,则它将返回0