2008-12-09 125 views
9

我有四個包含完全相同列的表格,並且希望創建一個全部四個視圖,以便我可以一起查詢它們。查看包含相同列的多個表格

這可能嗎?

(繁瑣的原因,我不能/我不允許把它們結合在一起,這將使這個不相干!)

+0

您使用的是哪種數據庫服務器? – ysth 2008-12-09 12:37:28

+0

我不確定您的確切設置,但是如果您有4個要用聯合查詢的重複表,則具有類型列的單個表可能會更有意義。除非系統已經存在或者還有其他因素。 – 2008-12-09 13:14:28

回答

15

假設,除了具有相同的列名,相同的列包含相同的數據,你要創建一個視圖這是所有這些的結合表。

類似下面應該工作,但我的SQL是生鏽:

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

UNION用於將多個SELECT語句的結果組合到一個結果集中。 – 2013-08-12 09:22:23

2

使用union語句

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

你可以,如果你的工會它們(我建議包括一些指標,因爲每個記錄來自哪個表):

select table1.column1, 1 as TableNumber 
from  table1 

union 

select table2.column1, 2 as TableNumber 
from  table2 

.. etc .. 
12

可能值得注意的是,您可能需要使用「union all」來保留可能存在於多個表中的唯一行。標準聯盟將刪除重複項。

2

除UNION以外,請使用UNION ALL,除非您明確希望排除重複行。 UNION本身需要更長的時間來執行(因爲它可以找到愚蠢的行爲),並刪除重複的行。

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,名稱FROM表A UNION ALL SELECT ID,名稱FROM表B UNION ALL SELECT ID,姓名FROM TableC UNION ALL SELECT ID,姓名FROM表D

此結果s在以下輸出:

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 
相關問題