Можно ли добавить столбцы (структура и содержимое) одной таблицы MySQL к другой? - PullRequest
1 голос
/ 17 февраля 2012

Я хотел бы скопировать структуру и содержимое одной таблицы mysql в другую, добавив все столбцы и значения этой таблицы к уже существующим в другой таблице.

Я мог бы сделать это вручную, но поскольку я говорю о большом количестве столбцов, было бы замечательно, если бы было какое-то выражение ALTER, чтобы помочь мне сделать это.

EDIT:

Чтобы объяснить себя лучше:

Сначала мне нужно добавить столбцы, содержащиеся в таблице B (имя-столбца, тип-данных), в таблицу A (которая уже имеет свой собственный набор столбцов). Как только это будет сделано, я могу скопировать содержимое, что легко.

Полагаю, реальный вопрос заключается в следующем: есть ли способ добавить столбцы, содержащиеся в таблице B, в другую таблицу (таблицу A), которая имеет собственные столбцы?

Ответы [ 2 ]

1 голос
/ 14 июня 2015

Чтобы построить второе решение flavianatill, мне кажется, что этап экспорта / импорта не нужен.Если я правильно понимаю проблему, следующая строка должна сделать это.

CREATE TABLE IF NOT EXISTS merged_table AS (SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id);

Извините, я бы добавил это в комментарий, но мне не хватает репутации!

1 голос
/ 17 февраля 2012

Это скопирует все данные из исходной таблицы в целевую таблицу.Вы можете указать, какие столбцы должны идти в какие.изменив имена targetColumn .. и sourceColumn ....

INSERT INTO targetTable (
    targetColumn1
    targetColumn1
    targetColumn1
....
    targetColumnN
) 
SELECT
    sourceColumn1
    sourceColumn1
    sourceColumn1
....
    sourceColumnN
FROM sourceTable

Вы также можете создать sourceTable, выполнив

CREATE TABLE targetTable LIKE sourceTable

EDIT Метод для извлечениявсе данные от sourceTable до targetTable, однако удаляя targetTable, если он существует

DROP TABLE IF EXISTS targetTable;
CREATE TABLE targetTable LIKE sourceTable;
INSERT INTO targetTable SELECT * FROM sourceTable;

EDIT Если вам нужно сохранить старые данные, вам может потребоваться переназначить их, но вы можете объединить их в другие таблицы

CREATE TABLE targetTable LIKE sourceTable;
INSERT INTO targetTable SELECT * FROM sourceTable;
INSERT INTO targetTable ( fieldsToInsertTo ) SELECT fieldsToSelectFrom FROM oldTargetTable ON DUPLICATE KEY ......;
DROP TABLE IF EXISTS oldTargetTable;
RENAME TABLE targetTable TO oldTargetTable;

Однако, возможно, потребуется либо логика ON DUPLICATE KEY UPDATE ....., либо просто INSERT IGNORE на секунду, если вы счастливы выбросить любые конфликтующие строки PRIMARY / UNIQUE.Это предполагает, что у вас есть sourceTable, который вы хотите скопировать и объединить с данными из oldTargetTable.Таблица targetTable - это просто временное имя.

Если вы хотите отдать предпочтение данным из старой таблицы, просто поменяйте местами порядок выполнения INSERT, конечно

...