Мне нужно скопировать данные из одной таблицы в другую. Таблицы не имеют все одинаковые столбцы или порядок; но копируемые данные всегда находятся в одних и тех же столбцах; то есть данные из столбца foo
должны быть скопированы в столбцы foo
.
Если бы было только двумя таблицами, я мог бы просто жестко закодировать имена столбцов, например:
INSERT INTO table_target ( column1, column2, column4 )
SELECT column1, column2, column4 FROM table_source;
Однако есть пара дюжин таблиц, и необходимо выполнить какое-то дополнительное преобразование, поэтому было бы неплохо, если бы я мог просто сказать: скопировать все соответствующие столбцы и игнорировать остальные.
Мне удалось выяснить, как получить список общих столбцов, но теперь я застрял.
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)
;