2011-03-02 42 views
2

在Oracle中,會發生什麼,當我做:從表1的工會選擇table2.col2 選擇table1.col1從表2甲骨文聯合caluse:如果有一個列名不匹配

它給我的所有記錄的工會和結果列的名稱是col1。

不應該由於列名不匹配而拋出錯誤嗎?

+0

沒有......結果集是根據第一選擇創建,只要一個錯誤「類型「匹配,第二個選擇的結果集被附加。 – 2011-03-02 16:16:25

回答

5

只要列數據類型不匹配,列名將始終來自第一個查詢。它不應該(並且,正如你發現的那樣)不會拋出錯誤。

如果數據類型不匹配,即使隱式轉換是可能的,你會普遍得到

SQL>/
select 1 a from dual union select '2' from dual 
     * 
ERROR at line 1: 
ORA-01790: expression must have same datatype as corresponding expression 

SQL>/
select '1' a from dual union select 2 from dual 
     * 
ERROR at line 1: 
ORA-01790: expression must have same datatype as corresponding expression 
+0

我不瞭解Oracle,但只要有可能的非破壞性轉換,MySQL和Postgresql就不會抱怨類型不匹配。這可能是一個配置選項。 – krtek 2011-03-02 16:17:07

+0

@Krtek - Oracle通常不會進行數據類型轉換。在我的答案中發佈測試用例。 – 2011-03-02 16:34:57

+0

爲什麼不應該有錯誤?這就像說2個蘋果+3個桔子= 5個蘋果。我錯過了什麼? – Victor 2011-03-02 18:00:17

2

union不關心列的名稱,它只關心列的數量,最終它們的類型。

通常,列的名稱來自union中的第一個查詢。

+1

「通常」? 。 。 。 – 2011-03-03 02:49:04