Где этот sql-запрос содержит синтаксическую ошибку?

#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 столбцов.