【发布时间】:2011-07-07 09:56:11
【问题描述】:
在 oracle 中,当我这样做时: select table1.col1 from table1 union select table2.col2 from table2
它给了我所有记录的联合,结果列的名称是 col1。
这不应该因为列名不匹配而引发错误吗?
【问题讨论】:
-
否...结果集是从第一个选择创建的,只要“类型”匹配,就会附加第二个选择的结果集。
在 oracle 中,当我这样做时: select table1.col1 from table1 union select table2.col2 from table2
它给了我所有记录的联合,结果列的名称是 col1。
这不应该因为列名不匹配而引发错误吗?
【问题讨论】:
只要列数据类型不匹配,列名将始终来自第一个查询。它不应该(并且,正如您所发现的那样)不会抛出错误。
如果数据类型不匹配,即使可以进行隐式转换,一般也会报错
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
【讨论】:
union 不关心列名,它只关心列的数量以及最终的类型。
通常,列的名称来自union 中的第一个查询。
【讨论】: