Bueno, al unir dos o mas consultas, todas ellas deben tener el mismo número de columnas, y esto es algo que no podemos transgredir, por lo que a tu problema solo se me ocurren dos posibles soluciones, o quitas columnas a una de ellas, o le pones a la otra. Puedes incluir constantes e incluso valores nulos para lograr tu propósito. Por ejemplo:
Supongamos que tenemos dos tablas parecidas pero con diferente numero de columnas que queremos unir. En una tenemos artículos normales (ARTICULOS) y en otras tenemos artículos en packs de N unidades (PACKS), done las unidades de cada pack está informado en un campo que la primera tabla no tiene, realicemos la unión de la siguiente manera:
- Código: Seleccionar todo
select ID_ARTICULO as ID, NOMBRE_ARTICULO as NOMBRE, 1 as UNIDADES
from ARTICULOS
union all
select ID_PACK, NOMBRE_PACK, UNIDADES
from PACKS
En la consulta anterior, a la select donde figura la tabla que nos falta una columna le añadimos una constante para aparejar el número de columnas de las dos consultas que forman la consulta principal, pero podemos hacerlo incluso con un valor nulo:
- Código: Seleccionar todo
select ID_ARTICULO as ID, NOMBRE_ARTICULO as NOMBRE, NULL as UNIDADES
from ARTICULOS
union all
select ID_PACK, NOMBRE_PACK, UNIDADES
from PACKS
Es posible que esta última opción de problemas por una cuestión de tipos de datos, de modo que deberemos especificar de que tipo es la columna donde forzamos un nulo como constante, por ejemplo en Oracle lo haríamos así:
- Código: Seleccionar todo
select ID_ARTICULO as ID, NOMBRE_ARTICULO as NOMBRE, to_number(NULL) as UNIDADES
from ARTICULOS
union all
select ID_PACK, NOMBRE_PACK, UNIDADES
from PACKS
De este modo le estamos diciendo que la columna es de tipo numérico.
Espero te sirva, saludos.