2010-02-22 16 views

Respuesta

131

añadir columnas adicionales como nulo para la tabla que tiene menos columnas como

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

¿Hay alguna manera de completar un valor predeterminado para la columna Nulo? – Hans

+2

@Hans: puede hacer algo como isnull (ColumnName, 0) como ColumnName o isnull (ColumnName, '-') como ColumnName o algo similar. – Kangkan

+3

También puede hacer: seleccionar 'Algunos valores personalizados' como [Col1] ... –

4

Vine aquí y seguido por encima de respuesta. Pero la falta de coincidencia en el tipo de orden de datos provocó un error. La siguiente descripción de otra respuesta será útil.

¿Los resultados son los mismos que la secuencia de columnas en su tabla? porque Oracle es estricto en órdenes de columna. este ejemplo de arriba genera un error:

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: la expresión debe tener el mismo tipo de datos como expresión

correspondiente Como se puede ver la causa del error está en el orden de la columna no coincidente que implica mediante el uso de * como especificador de lista de columnas. Este tipo de errores se puede evitar fácilmente mediante la introducción de la lista de columnas de forma explícita:

col_a selecto, col_b, col_c de test1_1790 union all select col_a, col_b, col_c de test2_1790; Un escenario más frecuente para este error es cuando inadvertidamente swap (o Shift) dos o más columnas en la lista SELECT:

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

O si lo anterior no soluciona el problema, la forma de crear un alias en las columnas como esta: (la consulta no es el mismo que el suyo, pero el punto aquí es cómo agregar alias en la columna.)

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 
0

si sólo el 1 fila, se puede utilizar unirse a

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

Una unión de dos tablas de 1 fila (dos relaciones multiseries cada una con una tupla) tendría dos filas (tuplas) en la relación resultante. En álgebra relacional (que SQL no es), el resultado de unión _might_ puede ser una fila, aunque solo si las dos relaciones de entrada contienen una tupla idéntica, por ejemplo. auto-unión de una relación de una tupla. –

Cuestiones relacionadas