2013-03-25 4 views
3

Следуя этому вопросу, я пытаюсь подражать правильному ответу для вставки данных в мою таблицу, только если он пуст.Выполнение mysql insert только в том случае, если таблица пуста

Execute INSERT if table is empty?

Это мой код:

INSERT INTO `statuses` SELECT 
    ('Something', 'Something else', 123), 
    ('Something', 'Something else', 234) 
    WHERE NOT EXISTS (SELECT * FROM `statuses`); 

Но вместо того, чтобы добавлять элементы, если таблица пуста, я просто получаю:

#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 'WHERE NOT EXISTS (SELECT * FROM `statuses`)' 

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

+0

Прежде всего это должно быть VALUES вместо первого SELECT. – Sebastian

+0

Ответ сверху в связанном вопросе говорит по-разному. Я пытался скопировать отправленный код: он говорит не использовать VALUES. – Saturnix

ответ

3

У вас есть синтаксические ошибки в своем заявлении:

INSERT INTO `statuses` 
    (SELECT 'Something', 'Something else', 123 
    WHERE NOT EXISTS (SELECT * FROM `statuses`) 
    ) union all 
    (SELECT 'Something', 'Something else', 234 
    WHERE NOT EXISTS (SELECT * FROM `statuses`) 
    ); 

Вам нужно повторить where дважды в этом случае, один раз для каждого подзапроса. Вы также можете сделать:

INSERT INTO `statuses` 
    select t.* 
    from ((SELECT 'Something' as col1, 'Something else' as col2, 123 as col3 
     ) union all 
      (SELECT 'Something', 'Something else', 234 
     ) 
     ) t 
    WHERE NOT EXISTS (SELECT * FROM `statuses`); 

В этой версии вам необходимо назначить имена столбцам.

Или вы могли бы просто использовать два отдельных оператора вставки.

+0

первая дает мне эту ошибку: «У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с WHERE NOT EXISTS (SELECT * FROM' statuses') все SELECT 'Something', '' в строке 3 " – Saturnix

+0

@Saturnix ... Единственное, о чем я могу думать, это проблема синтаксического анализа. Я добавил скобки, чтобы предотвратить это. На практике я обычно помещаю выражения 'union' в предложение' from', как и во втором запросе. –

+0

первый по-прежнему не работает (такая же ошибка, как и раньше), но вторая работает отлично, спасибо! – Saturnix

1

Правильный синтаксис:

INSERT INTO user_authentication 
SELECT t.* 
FROM ((SELECT 1 as col1, 'kingston' as col2, 'test' as col3, true as col4)) t 
WHERE NOT EXISTS (SELECT * FROM user_authentication); 

Это работает для меня.

+0

Это тоже работает для меня. Используя его с sqlite. – tbutcaru

Смежные вопросы