2012-01-26 55 views
2

我必须选择,我想使用UNION合并请求:结合两个表具有不同的列

表1:这是TABLE_A,表-B和table_c之间的连接

id_table_a desc_table_a table_b.id_user table_c.field 
----------------------------------------------------------- 
1   desc1   1     field1 
2   desc2   2     field2 
3   desc3   3     field3 

表2:这也是TABLE_A,表-B和table_c之间的连接,但它有这些列:

id_table_a desc_table_a table_c.id_user table_c.field 
----------------------------------------------------------- 
4   desc4   4     field4 
5   desc5   5     field8 
9   desc9   6     field9 

两者的区别在于表1中我们有table_b.id_user和表二 table_c.id_user代替。

组合表

id_table_a desc_table_a  id_user table_c.field 
    ----------------------------------------------------------- 
    1   desc1   1     field1 
    2   desc2   2     field2 
    3   desc3   3     field3 
    4   desc4   4     field4 
    5   desc5   5     field5 
    9   desc9   6     field6 

我已经有工作,但做工会加入请求两者之间给了我

ORA-01790 expression must have same datatype as corresponding expression 

其意义,因为两列是不一样的。

即时通讯使用zend_Db的加入和联合为此。

那么我该如何解决这个问题以得到结果呢?

谢谢。

+0

使用查询中所有字段的数据类型是什么?你的问题是什么? –

+0

表1和表2字段具有完全相同的数据类型,table_b和table_c中的id_user在DB(NUMBER(6,0))中具有相同的类型 –

+2

那么,ORA-01790只有在它们不是时才会发生(参见例如:http ://www.techonthenet.com/oracle/errors/ora01790。PHP) –

回答

11

结果是否与表中列的顺序相同?因为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:表达式必须具有相同的数据类型相应的表达

正如所看到的错误的根本原因是在被隐含的失配列顺序通过使用*作为列表说明符。

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

此错误的更频繁的情况是,当你不经意地掉(或移动)在SELECT列表中的两个或多个列:

这种类型的错误,可以通过显式输入列清单很容易地避免
select col_a, col_b, col_c from test1_1790 
union all 
select col_a, col_c, col_b from test2_1790; 

或者如果以上操作不解决您的问题,怎么样创造列 像这样的ALIAS:(查询是不一样的你的,但这里的关键是如何在添加别名柱。)

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 

希望这有助于。

+2

非常感谢,做了两个建议,它的作品像一个魅力:) –

相关问题