Ho bisogno di copiare i dati da una tabella a un'altra. Le tabelle non hanno tutte le stesse colonne, o ordine; ma i dati da copiare sono sempre nelle stesse colonne; ovvero i dati della colonna foo
devono essere copiati nelle colonne foo
.Copia dati tabella con colonne comuni
Se era solo due tavoli ho potuto solo hardcode i nomi delle colonne come:
INSERT INTO table_target (column1, column2, column4)
SELECT column1, column2, column4 FROM table_source;
Tuttavia ci sono un paio di dozzine di tavoli, e un po 'di trasformazione in più deve essere fatto, quindi sarebbe bello se potessi semplicemente dire: copia qualsiasi colonna corrispondente e ignora il resto.
Sono riuscito a capire come ottenere un elenco delle colonne comuni, ma ora sono bloccato.
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)
;
puoi usare sql dinamico? stai usando SQL in un altro linguaggio di programmazione? – golimar
questo sembra un compito una tantum. È vero? O è qualcosa che deve correre ripetutamente, forse in produzione? Se si tratta di una cosa singola, è possibile utilizzare il codice precedente (con alcune modifiche) per generare più SQL e quindi eseguire l'SQL generato. – MJB
Sì, è una query una tantum e la soluzione che ho utilizzato è stata essenzialmente questa procedura in due passaggi. Ancora, sarebbe bello sapere come farlo "correttamente". – Odalrick