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

Posted

技术标签:

【中文标题】将 5 个表数据合并到主表中【英文标题】:Merge 5 tables data into Master Table 【发布时间】:2013-11-10 11:07:39 【问题描述】:
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

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

【问题讨论】:

我不认为您在问题中的查询是您执行的查询 - 因为其中三个连接正在访问同一个 T2 表 - 并且没有别名 T3 或 T4 - 所以查询应该有出错了。 【参考方案1】:

您现有查询的问题是您在所有表之间使用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 匹配时返回其他表中的数据(如果存在)。

【讨论】:

对不起。我试过了。但仍然得到重复的行。包含 MT.PK 值的多行。我想要 MT 的每一行以及对应的其他表值。 @sapatelbaps 如果您的 PK 在连接的表中存在多次,那么您要返回哪一个? 你在 sqlfiddle 上分享的例子是正确的,我解决了这个问题。 @bluefeet

以上是关于将 5 个表数据合并到主表中的主要内容,如果未能解决你的问题,请参考以下文章

通过 =Query 将多个工作表合并到主工作表后,如何自动组织数据?

连接 5 个表 - 1 个主表加上 4 个主表有多行,但主数据重复

将数据添加到主表上的多个记录的链接表中

java 两个表同时插入数据,第二个表的一个字段是取第一个表的ID值 要怎么取 我拿到的都是空。。

宏从一张表中逐列复制并粘贴到主表中,以保持不断增长的数据

查询从 3 个表中获取数据,主表和总和列从彼此 2 个表中获取