2015-10-06 4 views
2

У меня есть запрос, работающий в SQLite, но он не работает в MySQL.сочетание «WHERE NOT EXISTS» & «SELECT 1 FROM» не работает

Я использую: PHP, PDO, SQLite & MySQL

Вот запрос:

INSERT INTO mytable (id, name, tag, timestamp) 
    SELECT 11, 'Legio', 'LR', 1234567 
     WHERE NOT EXISTS (
      SELECT 1 FROM mytable 
       WHERE id = 11 AND name = 'Legio' AND tag = 'LR' AND timestamp = (
        SELECT max(timestamp) FROM mytable WHERE id = 11)) 

В результате сообщение об ошибке:

Ошибка синтаксиса около «WHERE НЕ СУЩЕСТВУЕТ (ВЫБОР 1 ОТ mytable ГДЕ Идентификатор = 11 И имя 'в строке 3.

Что не так с этим запросом в MySQL?

Можно ли адаптировать этот оператор для работы в MySQL и SQLite ???

+1

Возможные дубликат [Как «вставить, если не существует» в MySQL?] (Http://stackoverflow.com/questions/1361340/how-to-insert-if-not-exist-in-mysql) –

+0

Я ищу правильный оператор, который работает в SQLite и MySQL. – lukesky333

ответ

-1

Оно должно быть:

SELECT 11, 'Legio', 'LR', 1234567 FROM `table_name` WHERE NOT EXISTS... 

Вы пропустили FROM.

+0

Я думаю, что нет ... Я не выбираю эти значения из любой таблицы. Этот оператор работает в SQLite. – lukesky333

+0

Попробуйте, если можете, возможно, он ожидает FROM - вы можете иметь любую таблицу в этом 'table_name' – itoctopus

1

При использовании предложения WHERE вам нужно выбрать имя таблицы. Так как вы на самом деле не выбирая из реальной таблицы, вы можете использовать специальное имя таблицы DUAL

INSERT INTO mytable (id, name, tag, timestamp) 
SELECT 11, 'Legio', 'LR', 1234567 
FROM DUAL 
WHERE NOT EXISTS (
    SELECT 1 FROM mytable 
    WHERE id = 11 AND name = 'Legio' AND tag = 'LR' 
     AND timestamp = (
      SELECT max(timestamp) FROM mytable WHERE id = 11)) 
Смежные вопросы