当前位置:  开发笔记 > 编程语言 > 正文

查看包含相同列的多个表

如何解决《查看包含相同列的多个表》经验,为你挑选了3个好方法。

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

这可能吗?

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



1> AlfaZulu..:

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

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

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



2> Jonathan..:

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



3> Pete OHanlon..:

从您的查询中很难判断您是希望基于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

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有