题
我有一个包含完全相同的列的四个表,并希望创建在四个视图,所以我可以查询在一起。
这是可能的?
(繁琐的原因,我不能/我不允许把它们结合在一起,这将使这个不相干!)
解决方案
假设除了具有相同的列名,相同的列包含相同的数据,要创建的一个观点,即是所有这些表的联合。
像下面这样的东西应该工作,但我的SQL是生锈的:
(CREATE VIEW view_name AS
(SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3));
其他提示
这可能是值得指出的是,您可能需要使用“UNION ALL”,保留其可以在表中不止一个存在唯一行。一个标准的联合将删除重复。
这是很难从查询告诉你是否希望根据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
现在,运行针对此以下查询:
选择识别码,从表A名称 UNION ALL SELECT ID,名称FROM表B UNION ALL SELECT ID,名称FROM表C UNION ALL SELECT ID,名称FROM表D
这导致如下输出:
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
使用联合。 下面是解释
使用union语句
select * from table1
union
select * from table2
union
select * from table3
您可以的,如果你的工会它们(我建议包括一些指标,因为每个记录来自哪个表):
select table1.column1, 1 as TableNumber
from table1
union
select table2.column1, 2 as TableNumber
from table2
.. etc ..
而不是UNION,使用UNION ALL,除非你特别希望要排除重复的行。 UNION自身需要更长的时间来执行(因为排序它找到愚弄),并删除重复的行。
不隶属于 StackOverflow