【发布时间】:2012-03-20 02:10:18
【问题描述】:
假设我有 10 个表,每个 tableN 都有一个 ID 和一个 ValueN。 我想将它们全部合并到一个包含以下内容的表中:
ID Value1 Value2 Value3 ...
ID 是唯一的,但每个表可以有任意数量的记录,因此结果行可以是:
001 3.1 Null 4.6 ...
我知道当只有 2 个表时如何进行这个简单的查询。但不知道比较 10 个表的 ID 值的最佳方法。
【问题讨论】:
假设我有 10 个表,每个 tableN 都有一个 ID 和一个 ValueN。 我想将它们全部合并到一个包含以下内容的表中:
ID Value1 Value2 Value3 ...
ID 是唯一的,但每个表可以有任意数量的记录,因此结果行可以是:
001 3.1 Null 4.6 ...
我知道当只有 2 个表时如何进行这个简单的查询。但不知道比较 10 个表的 ID 值的最佳方法。
【问题讨论】:
假设您有 3 张桌子(或任意数量的桌子)
Table1: Table2: Table3
ID Value1 ID Value2 ID Value3
1 A 1 AAA 1 111
2 B 2 BBB 2 222
3 C 5 EEE 3 333
4 444
5 555
您可以使用这样的查询来确保从所有表中获取所有可能的数据:
SELECT U.ID,
Table1.Value1,
Table2.Value2,
Table3.Value3
FROM (((SELECT ID FROM Table1
UNION
SELECT ID FROM Table2
UNION
SELECT ID FROM Table3) AS U
LEFT JOIN Table1 ON U.ID=Table1.ID)
LEFT JOIN Table2 ON U.ID=Table2.ID)
LEFT JOIN Table3 ON U.ID=Table3.ID;
其中的结果是:
ID Value1 Value2 Value3
1 A AAA 111
2 B BBB 222
3 C 333
4 444
5 EEE 555
基本上,它只是每个表上的一系列LEFT JOIN,全部由所有表中所有可能的 ID 的并集连接:
SELECT ID FROM Table1
UNION
SELECT ID FROM Table2
UNION
SELECT ID FROM Table3
【讨论】: