ID1 Name ID2 Single
----------------------------------------------------
1 ABC 1 100
2 DEF 1 200
表2
ID1 Name ID2 Monthly
----------------------------------------------------
3 PQR 2 500
4 LMN 2 600
1 ABC 2 700
2 DEF 2 800
我想要输出
ID1 Name ID2 Single Monthly
--------------------------------------------------------
1 ABC 1 100 700
2 DEF 1 200 800
3 PQR 2 NULL 500
4 LMN 2 NULL 600
我使用所有联盟,联盟ALL,联盟没有任何效果 提前谢谢
答案 0 :(得分:1)
试试这个:
select coalesce(T1.ID1, T2.ID1) as ID1,
coalesce(T1.Name, T2.Name) as ID1,
coalesce(T1.ID2, T2.ID2) as ID2,
T1.Single,
T2.Monthly
from Table1 as T1
full outer join Table2 as T2
on T1.ID1 = T2.ID1
http://data.stackexchange.com/stackoverflow/q/121659/
如果您知道表2中始终存在所有行,则可以使用right outer join
代替full join
。
答案 1 :(得分:0)
希望您使用的是Sql Server 2008(否则我的查询中的insert语句将无效)。试试这个吧。 从所需的输出,我猜你需要table2中的所有值和相应的Single(表1中的列名)值。
DECLARE @tempTable1 TABLE (ID1 INT,Name VARCHAR(10),ID2 INT,Single INT)
DECLARE @tempTable2 TABLE (ID1 INT,Name VARCHAR(10),ID2 INT,Monthly INT)
INSERT INTO @tempTable1 VALUES
(1 ,'ABC' ,1 ,100),
(2 ,'DEF' ,1 ,200)
INSERT INTO @tempTable2 VALUES
(3 ,'PQR' ,2 ,500 ),
(4 ,'LMN' ,2 ,600 ),
(1 ,'ABC' ,2 ,700 ),
(2 ,'DEF' ,2 ,800 );
SELECT
T2.ID1
,T2.Name
,T2.ID2
,T1.Single
,T2.Monthly
FROM @tempTable2 T2
LEFT OUTER JOIN @tempTable1 T1
ON T2.ID1 = T1.ID1
ORDER BY T2.ID1