我有一个包含完全相同的列的四个表,并希望创建在四个视图,所以我可以查询在一起。

这是可能的?

(繁琐的原因,我不能/我不允许把它们结合在一起,这将使这个不相干!)

有帮助吗?

解决方案

假设除了具有相同的列名,相同的列包含相同的数据,要创建的一个观点,即是所有这些表的联合。

像下面这样的东西应该工作,但我的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自身需要更长的时间来执行(因为排序它找到愚弄),并删除重复的行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top