Necesito copiar datos de una tabla a otra. Las tablas no tienen todas las mismas columnas u orden; pero los datos que se copiarán siempre están en las mismas columnas; es decir, los datos de la columna foo
deben copiarse en las columnas foo
.Copie los datos de la tabla con columnas comunes
Si era sólo dos mesas que sólo podía codificar los nombres de columna como:
INSERT INTO table_target (column1, column2, column4)
SELECT column1, column2, column4 FROM table_source;
Sin embargo, hay un par docena de mesas, y alguna transformación adicional hay que hacer, por lo que sería bueno si pudiera decir: copie las columnas correspondientes e ignore el resto.
He logrado averiguar cómo obtener una lista de las columnas comunes, pero ahora estoy atascado.
SELECT src.col
FROM (SELECT COLUMN_NAME as col
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'table_target') as trg
INNER JOIN
(SELECT COLUMN_NAME as col
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'table_source') as src ON (src.col=trg.col)
;
puede usar dynamic sql? ¿estás usando SQL dentro de otro lenguaje de programación? – golimar
esto suena como una tarea de una sola vez. ¿Es eso cierto? ¿O es algo que tiene que ejecutarse repetidamente, tal vez en producción? Si se trata de algo único, puede usar el código anterior (con algunos cambios) para generar más SQL y luego ejecutar el SQL generado. – MJB
Sí, es una consulta única, y la solución que terminé usando fue esencialmente este proceso de dos pasos. Aún así, sería bueno saber cómo hacerlo "correctamente". – Odalrick