Cómo combinar varias tablas que varían ligeramente en columnas

Tengo varias tablas donde hay aproximadamente 10 columnas comunes, pero algunas tienen de 1 a 2 columnas adicionales.

Me gustaría combinar todas estas tablas en una tabla con una fila para cada fila de cada tabla, con valores NULOS para las columnas que no existían en la tabla fuente de cada fila en particular.

Entonces mis inputs se ven más o less así:

table1 id | colA | colB table2 id | colA | colB | colC table3 id | colA | colB | colD 

Y estoy tratando de get esto:

 allTables id | colA | colB | colC | colD 

En el ejemplo anterior, todas las filas de la tabla 1 tendrían valores NULL para colC y colD en allTables, todas las filas de la tabla 2 tendrían valores nulos para colD, y todas las filas de la tabla 3 tendrían valores nulos en colC.

Un par de notas:

  • La identificación de la columna no es la misma ni está relacionada entre tablas de ninguna manera
  • Mi ejemplo muestra 3 tablas, pero tengo alnetworkingedor de 8-9.
  • Existen filas duplicadas dentro de cada tabla de origen y deben conservarse.

En particular, me interesa si hay una respuesta similar a la más votados aquí o algo así más general.

 SELECT id, colA, colB, NULL AS colC, NULL AS colD FROM Table1 UNION ALL SELECT id, colA, colB, colC, NULL AS colD FROM Table2 UNION ALL SELECT id, colA, colB, NULL AS colC, colD FROM Table3 

Como los identificadores no están relacionados, es posible que también desee rastrear de qué tabla proviene la fila en caso de que haya duplicates entre las tablas. Para hacer eso, solo tiene un valor codificado con un alias con un valor diferente en cada una de las tres instrucciones SELECT .

Puedes intentar esto:

 SELECT id, colA, colB, NULL AS colc, NULL AS cold FROM table1 UNION ALL SELECT id, colA, colB, colc, NULL AS cold FROM table2 UNION ALL SELECT id, colA, colB, NULL AS colc, cold FROM table3 

Puedes usar un UNION :

  SELECT id, colA, colB, null AS colC, null AS colD FROM table1 UNION ALL SELECT id, colA, colB, colC, null AS colD FROM table2 UNION ALL SELECT id, colA, colB, null AS colC, colD FROM table3; 

Como se discutió en los comentarios, puede variar esto con UNION / UNION DISTINCT si desea descartar duplicates de entre las diferentes tablas. Gracias a los comentaristas.

Lo que necesitas es una UNION :

 SELECT id, colA, colB, null as colC, null as colD FROM table1 UNION SELECT id, colA, colB, colC, null as ColD FROM table2 UNION SELECT id, colA, colB, null as colC, cold FROM table3