Tengo varias tablas con valores de datos. Todos tienen una serie de columnas en común, pero también una columna única cada una:

TableA = id, value, source, destination_a
TableB = id, value, source, destination_b
TableC = id, value, source, destination_c
TableD = id, value, source, destination_d
...

Quiero crear una vista de todos estos datos, algo como:

TableV = id, value, source, destination_a, destination_b, destination_c, destination_d

Donde destination_X para cada fila son NULL si no provienen de esa tabla.

Intenté anular las columnas manualmente, por ejemplo (con solo dos de las tablas anteriores):

CREATE VIEW TableV AS
SELECT id, value, source, destination_a NULL AS destination_b FROM TableA UNION
SELECT id, value, source, destination_b NULL AS destination_a FROM TableB

Pero esto deja una columna completamente en blanco.

¿Cómo puedo crear una tabla que sea una unión de todas estas tablas, pero con todas las columnas N incluidas y debidamente anuladas?

TableV | id | value | source | destination_a | destination_b
         a0    a1      a2      a3              NULL
         b1    b2      b3      NULL            b4
0
Timmy O'Mahony 5 dic. 2019 a las 20:44

2 respuestas

La mejor respuesta

OK, el problema aquí era simplemente con cómo estaba ordenando el SELECT. Debería haber tenido:

CREATE VIEW TableV AS
SELECT id, value, source, destination_a NULL AS destination_b FROM TableA UNION
SELECT id, value, source, NULL AS destination_a, destination_b FROM TableB

Estaba poniendo NULL as ... al final de cada selección

0
Timmy O'Mahony 5 dic. 2019 a las 18:10

No estoy seguro de si esto se aplicaría a PostgresQL, pero para SQL-Server, algo como esto creo que funcionaría:

CREATE VIEW TableV AS
SELECT id, value, source, destination_a as [A],NULL as [B],NULL as [C], NULL as [D]
    FROM TableA UNION
SELECT id, value, source, NULL as [A],destination_b  as [B],NULL as [C], NULL as [D]
    FROM TableB UNION
SELECT id, value, source, NULL as [A],NULL as [B],destination_c  as [C], NULL as [D]
    FROM TableC UNION
SELECT id, value, source, NULL as [A],NULL as [B],NULL as [C], destination_d as [D]
    FROM TableD 
1
BWS 5 dic. 2019 a las 18:10