2011-03-02 92 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