Функция SQL NOT IN - PullRequest
       13

Функция SQL NOT IN

2 голосов
/ 28 ноября 2011

Я пытаюсь вставить запись и хочу проверить, что ее еще нет в таблице.

Я пытаюсь

INSERT INTO emp (empno, name) 
VALUES(2, 'ram') 
WHERE empno NOT IN (select empno from emp);

, но она показывает ошибку 'incorrect syntax near where'

Ответы [ 4 ]

2 голосов
/ 28 ноября 2011

Вы можете использовать следующий запрос для вставки записей в emp Если вы вставляете одну запись за раз, следующий запрос будет работать как можно лучше ...

insert into emp (empno,empname)
    select distinct empno,empname
      from ( 2 empno, 'ram' empname ) as a 
     where  a.empname not in ( select empname from emp )

Если вы хотите вставить несколько записей, просто найдите ниже запрос

insert into emp (empno,empname)
    select max(empno),empname 
      from ( select 2 empno, 'ram' empname 
              union 
             select 3 empno, 'ram1' empname 
              union 
             select 4 empno, 'ram' empname 
           ) as a 
     where a.empname not in ( select empname from emp )
     group by empname 
2 голосов
/ 28 ноября 2011

Вы не можете иметь предложение WHERE в операторах INSERT, у вас есть предложение WHERE только с SELECT/UPDATE

Если вы работаете с MySQL, вы можете сделать что-то вроде:

insert into emp (empno, name) values(2, 'ram') ON DUPLICATE KEY UPDATE name = 'ram'

И если у вас есть индекс unique в столбце имени, вы будете в безопасности

1 голос
/ 28 ноября 2011

Вы можете использовать INSERT IGNORE для автоматического сбоя, если строка существует.Он попытается вставить, но если ключ существует, он ничего не сделает.

INSERT IGNORE INTO emp (empno, name) VALUES (2, 'ram')

Возможно, вы захотите взглянуть на INSERT ... ON DUPLICATE KEY UPDATE

0 голосов
/ 28 ноября 2011

вы, вероятно, будете искать что-то вроде

insert into emp (empno, name) 
SELECT 2 , 'ram'
FROM emp 
WHERE 2 not in (select empno from emp) 

???

...