2010-07-16 147 views

回答

19

是,使用UNION -

CREATE VIEW vw_combined AS 
    SELECT * FROM TABLE1 
    UNION ALL 
    SELECT * FROM TABLE2 

...要求有相同的列數,並在每個位置上的數據類型匹配。

..preferrably,使用JOIN:

CREATE VIEW vw_combined AS 
    SELECT * 
    FROM TABLE1 t1 
    JOIN TABLE2 t2 ON t2.col = t1.col 

但我想提醒不要根據意見 - 如果沒有兌現,他們只准備的SQL語句。沒有性能優勢,並且如果基於另一個視圖構建視圖,可能會對性能產生負面影響。此外,視圖很脆弱 - 它們可以改變,如果有問題,直到使用支持視圖纔會知道。

+3

「最好使用JOIN」只有滿足要求時纔可以。我沒有看到表1和表2中的行在連接方式上有意義的聯繫。 OP聲明:「有相同的領域」,所以如果類型匹配,工會就會工作。 – 2010-07-16 17:32:14

+1

@ Shannon Severance:我不認爲有必要對邏輯進行審查或提供可能有用的其他信息。 – 2010-07-16 17:37:04

+4

我同意提及連接是很好的,因爲有兩種方法可以將兩個表合併在一起,使得結果比表自己的表更長或更寬。 (對於那個順便說一句,+1)。我不認爲一個人對於另一個人比較喜歡,而不知道OP想要做什麼。 – 2010-07-16 17:50:09

1
create or replace view view_name as 
select * from table_1 
union all select * from table_2 

注意: 視圖中的列是在創建視圖時設置的。視圖創建後向table_1和table_2添加列不會顯示在view_name中。您將需要重新運行上面的DDL以顯示新列。

如果你想重複的行被collasped單排(但對於服務器可能更多的工作):

create or replace view view_name as 
select * from table_1 
union select * from table_2 

一般來說它是壞的形式在選擇列表中使用*,但假設查詢使用視圖將選擇他們需要的,我會在這裏使用它,而不是明確命名所有的列。 (特別是因爲我不想在table_1和table_2發生更改時添加列名稱。)

+0

+1:我忘了在創作時提及這些專欄 – 2010-07-16 17:30:54

+0

@OMG小馬:最近我有點想到它,它在記憶銀行中很新鮮。 – 2010-07-16 17:50:32