Использование INSERT INTO SELECT, когда структуры таблиц не совпадают в MySQL - PullRequest
5 голосов
/ 03 июня 2011

Я знаком со следующим использованием команды:

INSERT INTO mytable 
SELECT * 
  FROM other_table 

Это прекрасно работает, когда таблицы идентичны с точки зрения разметки.

Я хотел бы сделать что-то вроде:

INSERT INTO mytable 
SELECT * 
  FROM other_table ON DUPLICATE KEY UPDATE

Сбой из-за синтаксической ошибки:

Ошибка MySQL: 1064 - у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '' в строке 1 ON QUERY INSERT INTO mytable SELECT * FROM other_table ON DUPLICATE KEY UPDATE

Я не могу найти никаких документов, которые описывают это.

1 Ответ

11 голосов
/ 03 июня 2011

Ваше заявление неполное:

INSERT INTO mytable 
SELECT * 
  FROM other_table ON DUPLICATE KEY UPDATE

Синтаксис требует, чтобы вы завершили часть UPDATE, указав, какие столбцы и какие значения обновлять.

UPDATE:

Это должно работать для вашего конкретного примера:

INSERT INTO mytable2 (id, name, `key`)
  SELECT id, name, `key` FROM mytable b
ON DUPLICATE KEY UPDATE name = b.name

Изменения:

  • уберите скобки вокруг имен столбцов в части SELECT.
  • заключите в кавычки имя столбца key, поскольку «ключ» является зарезервированным словом в MySQL.
...