查看包含相同列的多个表

时间:2008-12-09 12:24:41

标签: sql database union

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

这可能吗?

(由于繁琐的原因,我不能/不允许将它们合并,这会使这无关紧要!)

7 个答案:

答案 0 :(得分:16)

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

以下内容应该有效,但我的SQL生锈了:

(CREATE VIEW view_name AS
(SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3));

答案 1 :(得分:12)

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

答案 2 :(得分:8)

很难从您的查询中判断您是希望基于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,名称FROM TableB UNION ALL SELECT ID,名称FROM TableC UNION ALL SELECT ID,名称来自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

答案 3 :(得分:2)

使用union。 Here is explanation

答案 4 :(得分:2)

使用union语句

select * from table1
union 
select * from table2
union
select * from table3

答案 5 :(得分:2)

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

select   table1.column1, 1 as TableNumber
from     table1

union

select   table2.column1, 2 as TableNumber
from     table2

.. etc ..

答案 6 :(得分:2)

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