2010-02-22 29 views

回答

131

添加額外的列空的具有較少列的表像

Select Col1, Col2, Col3, Col4, Col5 from Table1 
Union 
Select Col1, Col2, Col3, Null as Col4, Null as Col5 from Table2 
+2

有沒有辦法填補空列的默認值? – Hans

+2

@Hans:您可以像ColumnName或者isnull(ColumnName,' - ')那樣將isnull(ColumnName,0)做成ColumnName或類似的東西。 – Kangkan

+3

您也可以這樣做: select [Some custom value] as [Col1] ... –

4

我來到這裏,跟着上面的回答。但數據類型順序不匹配導致錯誤。下面的描述來自另一個答案將派上用場。

上面的結果是否與表中列的順序相同?因爲oracle在列命令中是嚴格的。下面這個例子中產生一個錯誤:

create table test1_1790 (
col_a varchar2(30), 
col_b number, 
col_c date); 

create table test2_1790 (
col_a varchar2(30), 
col_c date, 
col_b number); 

select * from test1_1790 
union all 
select * from test2_1790; 

ORA-01790:表達式必須具有相同的數據類型相應的表達

正如所看到的錯誤的根本原因是在被隱含的失配列順序通過使用*作爲列表說明符。這種類型的錯誤可以通過顯式輸入列清單很容易地避免:

選擇爲col_a,col_b,col_c從test1_1790 UNION ALL 選擇爲col_a,col_b,從test2_1790 col_c; 此錯誤的更頻繁的情況是,當你不經意地掉(或移位)兩列或多列在SELECT列表:

select col_a, col_b, col_c from test1_1790 
union all 
select col_a, col_c, col_b from test2_1790; 

或者如果以上操作不解決您的問題,如何創建一個別名在這樣的列:(查詢是不一樣的你的,但這裏的關鍵是如何在列中添加別名)。

SELECT id_table_a, 
     desc_table_a, 
     table_b.id_user as iUserID, 
     table_c.field as iField 
UNION 
SELECT id_table_a, 
     desc_table_a, 
     table_c.id_user as iUserID, 
     table_c.field as iField 
0

如果只有1列,可以使用加入

Select t1.Col1, t1.Col2, t1.Col3, t2.Col4, t2.Col5 from Table1 t1 join Table2 t2; 
+0

兩個1行表(兩個多重關係,每個元組都有一個元組)的聯合在結果關係中有兩行(元組)。在關係代數(SQL不是)中,聯合結果_might_是一行,但只有兩個輸入關係包含相同的元組時,例如。一元關係的自我聯合。 –