联合两个表与不同数量的列

我被卡住了 – 我有两个表(表A和表B)。

这些有不同的列数 – 说表A有更多的列。

我怎么能结合这两个表,并为表B没有列的空值?

为具有较less列的表添加额外的列为空

Select Col1, Col2, Col3, Col4, Col5 from Table1 Union Select Col1, Col2, Col3, Null as Col4, Null as Col5 from Table2 

我来到这里跟着上面的答案。 但数据types顺序不匹配导致错误。 从另一个答案的下面的描述将派上用场。

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

正如您所看到的,错误的根本原因在于使用*作为列列表说明符所隐含的不匹配列sorting。 通过显式input列列表可以很容易地避免这种types的错误:

从test1_1790中selectcol_a,col_b,col_c union all从test2_1790中selectcol_a,col_b,col_c; 此错误更常见的情况是,您无意间交换(或移位)SELECT列表中的两列或更多列:

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

或者如果上述不能解决你的问题,那么在这样的列中创build一个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 

如果只有1行,则可以使用连接

 Select t1.Col1, t1.Col2, t1.Col3, t2.Col4, t2.Col5 from Table1 t1 join Table2 t2;