#mysql
#mysql
Вопрос:
Не могу понять, где здесь синтаксическая ошибка?
INSERT INTO `playlist_playlistentry` VALUES (playlist_id, media_id, order_by, added)
SELECT (699086, `playlist_playlistentry`.`media_id`, `playlist_playlistentry`.`order` order_by, `playlist_playlistentry`.`added`)
FROM `playlist_playlistentry`
WHERE `playlist_playlistentry`.`playlist_id` = 371390
Ошибка в workbench выглядит следующим образом:
Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT 699086, `playlist_playlistentry`.`media_id`, `playlist_playlistentry`.`or' at line 2
Комментарии:
1. у вас есть ВЫБОР после значений. предполагается, что это один запрос или два?
2. @galchen: это команда вставки, в которой источник значений не жестко запрограммирован, а динамический, для этого используется предложение select .
3. после ЗНАЧЕНИЙ следуют значения, которые вы вставляете в таблицы. вам нужно поместить ЗНАЧЕНИЯ после списка столбцов
4. Да, но Pol не знал синтаксиса.
5. И он, очевидно, хотел получить значения, используя оператор select, текст в () после ЗНАЧЕНИЙ содержит имена столбцов, что недопустимо в операторах insert, поэтому интуитивно некоторые люди, включая меня, поняли цель кода. Целью кода было динамически вставлять значения, используя предложение select в таблицу. В этом сценарии ЗНАЧЕНИЯ не нужны.
Ответ №1:
Отбросьте ключевое слово VALUES. Он не используется при вставке из оператора select.
INSERT INTO `playlist_playlistentry`
(playlist_id, media_id, order_by, added)
SELECT 699086, `playlist_playlistentry`.`media_id`, `playlist_playlistentry`.`order` order_by, `playlist_playlistentry`.`added`
FROM `playlist_playlistentry`
WHERE `playlist_playlistentry`.`playlist_id` = 371390
Ответ №2:
Вы используете select для получения значений, но из вашего запроса, я думаю, вы хотите поместить список столбцов. Правильный синтаксис будет:
INSERT INTO `playlist_playlistentry`(playlist_id, media_id, order_by, added)
SELECT 699086, `playlist_playlistentry`.`media_id`, `playlist_playlistentry`.`order` order_by, `playlist_playlistentry`.`added`
FROM `playlist_playlistentry`
WHERE `playlist_playlistentry`.`playlist_id` = 371390
Ответ №3:
Удалите VALUES
:
INSERT INTO `playlist_playlistentry` (playlist_id, ...)
Также удалите скобки из SELECT part
:
SELECT (699086, ... )
в:
SELECT 699086, ...
Ответ №4:
Вы используете обратный символ вместо апострофа '
? Также похоже, что у вас есть посторонние скобки вокруг списка SELECT
столбцов.