MySQL INSERT с SELECT UNION дает синтаксическую ошибку

Предположим, у меня есть таблица SomeTable с одним столбцом INT.

Этот запрос работает нормально:

INSERT INTO SomeTable
(SELECT 1 WHERE true) 
UNION
(SELECT 2 FROM SomeTable WHERE true) 

введите здесь описание изображения

Но это дает синтаксическую ошибку:

INSERT INTO SomeTable
(SELECT 1 WHERE true) 
UNION
(SELECT 2 WHERE true) 

Код ошибки: 1064. У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, на предмет правильного синтаксиса для использования рядом с «ГДЕ правда)» в строке 4.

В чем причина ошибки?

Как еще мне вставить несколько строк с фильтром WHERE?


person Avery235    schedule 04.03.2019    source источник
comment
Удалите скобки.   -  person jarlh    schedule 04.03.2019
comment
@jarlh использование скобок с UNION в MySQL разрешено, верно? По крайней мере, если вы немного переформатируете запрос, см. это   -  person Raymond Nijland    schedule 04.03.2019
comment
Когда вы просите о помощи с ошибкой, вы должны указать точное сообщение об ошибке.   -  person Bill Karwin    schedule 04.03.2019
comment
Что вы пытаетесь достичь?   -  person Gordon Linoff    schedule 04.03.2019
comment
@GordonLinoff избегайте вставки определенных строк на основе определенных условий (здесь упрощено как true).   -  person Avery235    schedule 04.03.2019
comment
@BillKarwin добавил сообщение об ошибке.   -  person Avery235    schedule 04.03.2019
comment
Удаление скобок @jarlh не имело значения.   -  person Avery235    schedule 04.03.2019
comment
Я предполагаю, что первый запрос, который вы показали выше, тоже не сработал, и вы этого не заметили. Использование предложения WHERE в запросе без предложения FROM всегда является синтаксической ошибкой.   -  person Bill Karwin    schedule 04.03.2019
comment
@BillKarwin добавил гифку, чтобы доказать, что это работает. MySQL 5.7.25.   -  person Avery235    schedule 04.03.2019
comment
дурацкий. Я могу воспроизвести это в 5.7, но в 5.6 я получаю: ERROR 1064 (42000): 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 'WHERE true) UNION (SELECT 2 FROM SomeTable WHERE true)' at line 2   -  person Bill Karwin    schedule 04.03.2019


Ответы (2)


Удалите круглые скобки и предложение where, у вас нет предложения FROM, поэтому ваше where неприменимо

INSERT INTO SomeTable
SELECT 1 
UNION
SELECT 2 

или если вам нужно условие, которое вы можете использовать из двойного

SELECT 1 from dual WHERE true
union 
SELECT 2 from  dual  WHERE true
person scaisEdge    schedule 04.03.2019
comment
Почему первый запрос работает? Он имеет WHERE без FROM для первого оператора SELECT. - person Avery235; 04.03.2019
comment
Я попробовал ваш первый запрос и не работает ... может быть, у вас есть какие-то выпущенные локальные или вы выполняете только вторую часть, где у вас есть из какой-то таблицы в первом запросе, который может привести к объединению ... во втором нет ... - person scaisEdge; 04.03.2019
comment
Оба запроса относятся к одной и той же таблице (которая имеет один столбец). - person Avery235; 04.03.2019
comment
Таблица вставки не в счет.. ошибка в выборе.. выбор без откуда и с где не работает - person scaisEdge; 04.03.2019
comment
Ответ обновлен .. для действительного условия where (используя FROM dual) - person scaisEdge; 04.03.2019
comment
Первый SELECT в первом запросе имеет WHERE, но не FROM, и он все еще работает. - person Avery235; 04.03.2019
comment
Я не могу воспроизвести ваше состояние. Я использую mysq 5.7. Теперь ваш код не работает. если ваш вопрос теоретический .. тогда добавьте больше информации о вашей среде db .. чтобы мы могли попытаться воспроизвести ваше состояние - person scaisEdge; 04.03.2019
comment
Тоже пользуюсь 5.7. Попробуйте создать таблицу с именем SomeTable с одним столбцом INT. - person Avery235; 04.03.2019
comment
Вы пробовали первый (не второй) запрос именно так, как есть? Какую ошибку он вам выдал? - person Avery235; 04.03.2019
comment
Я добавил gif, чтобы показать, что первый запрос работает. - person Avery235; 04.03.2019

Ваша скобка вызывает проблему. :

INSERT INTO SomeTable (col)
     SELECT 1 
     FROM . . 
     WHERE . . .
     UNION
     SELECT 2 
     FROM SomeTable 
     WHERE . . . ;
person Yogesh Sharma    schedule 04.03.2019
comment
Почему первый запрос работает? Второй запрос завершается ошибкой даже с удаленными скобками (без FROM). - person Avery235; 04.03.2019