2016-01-11 92 views
1

如何將兩個表連接在一起以獲取所有行,然後輸入NULL,其中一個在另一箇中缺失。左/右連接以接收所有行

例如:

declare @t1 table (x int) 
declare @t2 table (x int) 

insert into @t1 select 2 
insert into @t1 select 3 
insert into @t1 select 4 
insert into @t1 select 5 

insert into @t2 select 1 
insert into @t2 select 2 
insert into @t2 select 5 

select * 
from @t1 t1 
left join @t2 t2 on t2.x = t1.x 

結果應該是這樣的:

t1.x t2.x 
NULL 1 
2  2 
3  NULL 
4  NULL 
5  5 
+2

['FULL OUTER JOIN'](http://stackoverflow.com/questions/34719640/left-right-join-to-receive-all-rows) –

回答

2
select * 
from @t1 t1 
full outer join @t2 t2 on t2.x = t1.x 

這就像左連接,但即使有將採取所有記錄從兩個表沒有匹配,並且在沒有匹配時輸入null。

+0

使用全外連接 –

+0

謝謝你們就是這樣! – Avithohol

2
select * 
from @t1 t1 
FULL OUTER join @t2 t2 on t2.x = t1.x 
2

這兩個表中的所有行都在完整的外連接中返回。 SQL Server將以下ISO關鍵字用於FROM子句中指定的外部聯接:LEFT OUTER JOIN或LEFT JOIN。 RIGHT OUTER JOIN或RIGHT JOIN。 FULL OUTER JOIN或FULL JOIN