将5个表数据合并到主表中

时间:2013-10-30 17:20:15

标签: tsql join inner-join outer-join jointable

Main Table : MT
===============
PK, C1, C2
==========
1, X, X
2, X, X
3, X, X
..........
100, X, X


Table 1 :T1
===============
PK, TC1
=======
2, D1
3, D1

Table 2: T2
===============
PK, TC2
=======
3, D2

Table 3: T3
===============
PK, TC3
=======
4, D3

Table 4: T4
===============
PK, TC4
=======
2, D4

我希望在进行一些连接之后输出主表,或者如下所示:

Master Table
===============
PK,C1,C2,TC1,TC2,TC3,TC4
========================
(1,X,X,null,null,null,null)
(2,X,X,D1,null,null,D4)
(3,X,X,D1,D2,null,null)
(4,X,X,null,null,D3,null)

我试过

select * from
MT inner join T1 on MT.PK=T1.PK
inner join T2 on MT.PK = T2.PK
inner join T2 on MT.PK = T3.PK
inner join T2 on MT.PK = T4.PK

但我得到一些行重复。即使尝试过明显仍然会重复。我认为必须有其他替代方案才能实现这一目标。

1 个答案:

答案 0 :(得分:2)

现有查询的问题是您在所有表之间使用INNER JOIN。 INNER JOIN要求连接的列的值存在于两个表中。

在我看来,您想要使用LEFT JOIN代替:

select MT.PK, MT.C1, MT.C2, T1.TC1, T2.TC2, T3.TC3, T4.TC4
from MT 
left join T1 on MT.PK=T1.PK
left join T2 on MT.PK = T2.PK
left join T3 on MT.PK = T3.PK
left join T4 on MT.PK = T4.PK;

请参阅SQL Fiddle with Demo

如果MT匹配,LEFT JOIN将返回PK表中的所有行,然后返回其他表中的数据。