Oracle 用不同的列组合两个表

Oracle 用不同的列组合两个表,oracle,zend-framework,plsql,union,Oracle,Zend Framework,Plsql,Union,我必须选择要使用UNION组合的请求: 表1:它是表a、表b和表c之间的连接 id_table_a desc_table_a table_b.id_user table_c.field ----------------------------------------------------------- 1 desc1 1 field1 2 desc2 2

我必须选择要使用UNION组合的请求:

表1:它是表a、表b和表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:它也是表a、表b和表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中有
表b.id\u user
和表2
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的join and union来实现这一点

那么,我如何解决这个问题以获得结果呢


谢谢。

以上结果是否与表中的列顺序相同?因为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 col_a, col_b, col_c from test1_1790
union all
select col_a, col_c, col_b from test2_1790;
或者如果上述方法不能解决您的问题,那么在列中创建一个
别名
怎么样 如下所示:(查询与您的查询不同,但这里的重点是如何在列中添加别名。)


希望这能有所帮助。

您使用的查询中所有字段的数据类型是什么?您的查询是什么?表1和表2字段具有完全相同的数据类型,表b和表c中的id_用户在DB中具有相同的类型(数字(6,0)),ORA-01790仅在它们不存在的情况下才会发生(请参见此处:)非常感谢,这两个建议都有效吗
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