nea*_*ime 11 sql database union
我有四个包含完全相同列的表,并且想要创建所有四个视图,以便我可以一起查询它们.
这可能吗?
(由于繁琐的原因,我不能/不允许将它们组合起来,这会使这无关紧要!)
Alf*_*ulu 17
假设除了具有相同的列名,其列包含相同的数据之外,您还希望创建一个视图,该视图是所有这些表的并集.
像下面这样的东西应该工作,但我的SQL生锈了:
(CREATE VIEW view_name AS
(SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3));
Run Code Online (Sandbox Code Playgroud)
从您的查询中很难判断您是希望基于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
Run Code Online (Sandbox Code Playgroud)
现在,针对此运行以下查询:
SELECT ID,Name FROM TableA UNION ALL SELECT ID,Name FROM TableB UNION ALL SELECT ID,Name FROM TableC UNION ALL SELECT ID,Name FROM TableD
这导致以下输出:
1 John
2 Paul
1 Ringo
2 George
1 Bob
1 Kate
Run Code Online (Sandbox Code Playgroud)
这就是你追求的吗?如果是,则使用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
Run Code Online (Sandbox Code Playgroud)
这将导致以下数据视图:
MasterID MasterName BandID BandName BlackAdderID BlackAdderName BlackadderRealID BlackadderRealName
1 John 2 George 1 Bob 1 Kate
2 Paul 1 Ringo 1 Bob 1 Kate
Run Code Online (Sandbox Code Playgroud)