2014-05-08 69 views
-1
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) 

這將返回:返回null或爲零時,沒有價值發現

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

爲什麼你要在一個有'Test ###'字符串的列中調零? – dasblinkenlight

回答

1

您需要LEFT OUTER JOIN

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

,而不是一個INNER JOINOUTER JOIN將採取從源表中的所有行,而不是隻有那些同樣存在於連接表。

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

使用COALESCE

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

COALESCE將返回參數列表中的第一個非空值,所以如果t1.name出來作爲NULL那麼它將在它的位置返回0

+0

爲什麼downvote?這完全** ** OP所要求的:如果可能的話,他們希望最後兩個ID的值爲零而不是NULL。 –

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

請添加關於您提供的單一語句解決方案的關鍵方面的說明。 – Rachcha