2017-01-26 1 views
-1

Я две таблицы, перечисленные ниже:копия MySQL таблицы в другую таблицу (в пределах одной и той же базы данных) и автоматическое приращение вставлено строк

Таблица: «wp_topic»

enter image description here

Таблица: «wp_default_topics»

enter image description here

Что я пытаюсь сделать, это скопировать все строки из wp_default_topics (кроме Ф.О. r ID) в wp_topic auto-increment из новой таблицы (wp_default_topics).

я могу использовать следующий код, чтобы скопировать все нормально:

INSERT INTO wp_topic SELECT * FROM wp_default_topics 

, но я в конечном итоге остроумие ошибка "# 1062 - Дублировать запись '28' для ключа 'Primary'"

I попробовал:

INSERT INTO wp_topic SELECT * FROM wp_default_topics ON DUPLICATE KEY UPDATE ID=VALUES(ID+1) 

Но в конечном итоге с сообщением об ошибке:

«# 1064 - у вас есть адрес rror в синтаксисе SQL; проверьте руководство, которое соответствует версии сервера MariaDB для корректного синтаксиса использовать вблизи «+1)» в строке 1"

и я попробовал:

INSERT INTO wp_topic SELECT * FROM wp_default_topics ON DUPLICATE KEY UPDATE LAST_INSERT_ID(wp_topic.ID) 

Но я в конечном итоге с сообщением об ошибке :

«# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MariaDB, для правильного синтаксиса для использования рядом с «(wp_topic.ID)» по строке 1 »

Я также пробовал нижеследующее, что, как я думал, будет работать, но, к сожалению, это не так.

INSERT INTO wp_topic SELECT (user_id, name, subject, company, date) FROM wp_default_topics 

«# 1241 - Операнд должен содержать 1 колонку (ы)»

Я попробовал несколько вариантов выше, но без удачи я мог бы получить указатель, как к тому, что я здесь отсутствует

?

Спасибо

David

+0

Если вы на самом деле список из полей в вашей вставки и выбрать, опуская поле идентификатора; у вас не должно быть проблем. – Uueerdo

ответ

3

Вы должны пропустить id столбец при вставке, так что вы должны перечислить все столбцы в явном виде, а не использовать SELECT *

INSERT INTO wp_topic (user_id, name, subject, company, date) 
SELECT user_id, name, subject, company, date 
FROM wp_default_topics 
+0

Просто открыл вопрос, и вы ответили ему отлично. – Xorifelse

+0

Да, спасибо, что Бармар работает, и я вижу, что я делаю неправильно. – Sandy

0

Разве вы не можете просто удалить поле идентификатора из избранных и вставить?

INSERT INTO wp_topic (`user_id`, `name`, `subject`, `company`, `date`) 
SELECT `user_id`, `name`, `subject`, `company`, `date` FROM wp_default_topics 
+0

Второй вопрос, который я заметил, вы используете 'вокруг имен столбцов (user_id, имя и т. Д.), Но Barmar не делает, я не заметил разницы в коде, но имеет ли это эффект, если я их использую или нет? – Sandy

+0

Обычно запрос будет работать одинаково в любом случае. У этого сообщения есть хорошая информация об этом: http://stackoverflow.com/questions/261455/using-backticks-around-field-names – johnc

0

Другой немного более простой способ написания ВСТАВИТЬ суб-выберите запрос, который был предложен уже:

INSERT INTO wp_topic 
SELECT NULL, user_id, name, subject, company, date FROM wp_default_topics; 
Смежные вопросы