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。
答案 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
。