11

我有四个包含完全相同列的表,并且想要创建一个包含所有四个的视图,以便我可以一起查询它们。

这可能吗?

(出于乏味的原因,我不能/不允许将它们组合起来,这将使它无关紧要!)

4

7 回答 7

17

假设除了具有相同的列名之外,相同的列还包含相同的数据,您希望创建一个视图,该视图是所有这些表的联合。

像下面这样的东西应该可以工作,但我的 SQL 生锈了:

(CREATE VIEW view_name AS
(SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3));
于 2008-12-09T12:28:43.390 回答
13

值得注意的是,您可能需要使用“union all”来保留可能存在于多个表中的唯一行。标准联合将删除重复项。

于 2008-12-09T12:36:00.880 回答
9

从您的查询中很难判断您是否希望基于 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
于 2008-12-09T13:23:32.547 回答
2

使用联合。 这里是解释

于 2008-12-09T12:27:54.110 回答
2

使用联合声明

select * from table1
union 
select * from table2
union
select * from table3
于 2008-12-09T12:28:03.657 回答
2

如果你联合它们,你可以(我建议包括一些关于每条记录来自哪个表的指标):

select   table1.column1, 1 as TableNumber
from     table1

union

select   table2.column1, 2 as TableNumber
from     table2

.. etc ..
于 2008-12-09T12:30:19.067 回答
2

不要使用 UNION,而是使用 UNION ALL,除非您特别希望排除重复行。UNION 本身需要更长的时间来执行(因为它会进行查找欺骗的排序),并删除重复的行。

于 2008-12-09T12:51:57.353 回答