假设我有10个表,每个表N都有一个ID和一个ValueN。 我想将所有这些组合成一个表,其中包含以下内容:
ID Value1 Value2 Value3 ...
ID是唯一的,但每个表可以包含任意数量的记录,因此结果行可以是:
001 3.1 Null 4.6 ...
我知道如果只有2个表,如何进行这个简单的查询。但是不知道比较10个表中的ID值的最佳方法。
答案 0 :(得分:3)
假设您有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