我有四个包含完全相同列的表,并希望在所有四个上创建一个视图,以便我可以一起查询它们。
这可能吗?
(由于繁琐的原因,我不能/不允许将它们合并,这会使这无关紧要!)
答案 0 :(得分:16)
假设除了具有相同的列名,其列包含相同的数据外,您还希望创建一个视图,该视图是所有这些表的并集。
以下内容应该有效,但我的SQL生锈了:
(CREATE VIEW view_name AS
(SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3));
答案 1 :(得分:12)
值得注意的是,您可能需要使用“union all”来保留可能存在于多个表中的唯一行。标准联合将删除重复项。
答案 2 :(得分:8)
很难从您的查询中判断您是希望基于UNION返回数据,还是作为包含离散列的视图返回。这显然有效果。
考虑以下示例:
TableA
ID Name RelatedID
1 John 2
2 Paul 1
TableB
ID Name RelatedID
1 Ringo 1
2 George 1
TableC
ID Name RelatedID
1 Bob 1
TableD
ID Name RelatedID
1 Kate NULL
现在,针对此运行以下查询:
SELECT ID,Name FROM TableA UNION ALL SELECT ID,名称FROM TableB UNION ALL SELECT ID,名称FROM TableC UNION ALL SELECT ID,名称来自TableD
这导致以下输出:
1 John
2 Paul
1 Ringo
2 George
1 Bob
1 Kate
这就是你追求的吗?如果是,则使用UNION查询。
现在,如果你想要的效果是拥有相关数据的离散视图,你可能需要这样做:
SELECT A.ID MasterID, A.Name MasterName,
B.ID BandID, B.Name BandName,
C.ID BlackadderID, C.Name BlackadderName
D.ID BlackadderRealID, D.Name BlackadderRealName
FROM
TableA A
INNER JOIN
TableB B
ON
A.RelatedID = B.ID
INNER JOIN
TableC C
ON
B.RelatedID = C.ID
INNER JOIN
TableD D
ON
C.RelatedID = D.ID
这将产生以下数据视图:
MasterID MasterName BandID BandName BlackAdderID BlackAdderName BlackadderRealID BlackadderRealName
1 John 2 George 1 Bob 1 Kate
2 Paul 1 Ringo 1 Bob 1 Kate
答案 3 :(得分:2)
使用union。 Here is explanation
答案 4 :(得分:2)
使用union语句
select * from table1
union
select * from table2
union
select * from table3
答案 5 :(得分:2)
如果你将它们联合起来你可以(我建议包括一些关于每条记录来自哪个表的指标):
select table1.column1, 1 as TableNumber
from table1
union
select table2.column1, 2 as TableNumber
from table2
.. etc ..
答案 6 :(得分:2)
除非您特别希望排除重复行,否则使用UNION ALL而不是UNION。 UNION本身需要更长的时间来执行(因为它找到了dupes的排序),并删除了重复的行。