我有四个包含完全相同列的表,并且想要创建所有四个视图,以便我可以一起查询它们.
这可能吗?
(由于繁琐的原因,我不能/不允许将它们组合起来,这会使这无关紧要!)
假设除了具有相同的列名,其列包含相同的数据之外,您还希望创建一个视图,该视图是所有这些表的并集.
像下面这样的东西应该工作,但我的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
现在,针对此运行以下查询:
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
这就是你追求的吗?如果是,则使用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