2014-09-23 3 views
0

Я пытаюсь вставить новый пользователь, если не существует в таблице пользователей, я попробовал этот запрос, но сообщение об ошибке:MySQL: вставить, где не существует

INSERT INTO USER (name,email) 
VALUES ('John','[email protected]') 
WHERE NOT EXISTS 
    (SELECT id FROM USER WHERE email = '[email protected]') 

как вставить пользователь, если не существует?

ошибка:

#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 id from user where email = '[email protected]')' at line 5 

спасибо,

+3

И какова ошибка? –

+0

Версия сервера MySQL для правильного синтаксиса для использования рядом с «где не существует» (выберите идентификатор от пользователя, где email = '[email protected]') ' – mwafi

+0

Почему бы вам не использовать оператор IF для выполнения инструкции INSERT на данный состояние? ... – ne1410s

ответ

5

Использование insert . . . select:

INSERT INTO USER (name, email) 
    SELECT 'John', '[email protected]' 
    WHERE NOT EXISTS 
     (SELECT id FROM USER WHERE email = '[email protected]'); 

Я бы написать это как:

INSERT INTO USER (name, email) 
    SELECT name, email 
    FROM (SELECT 'John' as name, '[email protected]' as email) t 
    WHERE NOT EXISTS (SELECT 1 FROM USER u WHERE u.email = t.email); 

Но лучше подход, вероятно, просто положить в уникальный индекс, чтобы база данных защищает данные:

create unique index idx_users_email on user(email); 
5

INSERT ... SELECT Используйте вместо INSERT.

INSERT INTO USER (name,email) 
SELECT 'John','[email protected]' 
WHERE NOT EXISTS 
    (SELECT id FROM USER WHERE email = '[email protected]') 

Вы могли бы также рассмотреть возможность использования расширения ON DUPLICATE KEY UPDATE синтаксиса MySQL.

+0

ваш запрос должен иметь предложение 'FROM', иначе оно вызовет ошибку. http://www.sqlfiddle.com/#!2/82dea – Omesh

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