t-sql - 将5个表数据合并到主表中

标签 t-sql inner-join outer-join join

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

但是我得到了一些重复的行。即使尝试不同仍然会重复。我认为必须有其他替代方案来实现这一目标。

最佳答案

现有查询的问题是您在所有表之间使用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

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

关于t-sql - 将5个表数据合并到主表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19689657/

相关文章:

sql - 类型 "geography"不可比较。不能在 GROUP BY 子句中使用

mysql - mysql中的内连接逻辑

mysql - SQL 内部连接计算的 select 语句

mysql - 我希望这些行针对我的数据库的所有值运行

T-SQL - 如何在 xml 对象上使用 group by

sql - 在一列中显示所有表 SQL 的所有文本字段

mysql - php mysql比较2个表并使用REPLACE(id, 'junk'')AS id删除不匹配的BUT table2 id

sql - Oracle(旧?)加入 - 用于转换的工具/脚本?

php - 从一个表中选择与另一表中的值匹配的不同且随机的行

sql - FOR XML 无法序列化 char(0x0000),即使已包含 REPLACE 函数来替换 Char(0x0000)