2011-11-28 77 views
2

Iam嘗試插入記錄,我想檢查它是否已經不存在於表中。SQL NOT IN功能

我嘗試

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

,但它顯示錯誤 'incorrect syntax near where'

+1

你在使用什麼SQL服務器? – Trott

回答

2

您可以使用下面的查詢將記錄插入到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

你不能對INSERT聲明WHERE條款,你有WHERE只有SELECT/UPDATE

如果與您合作條款MySQL,你可以這樣做:

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

如果你有名字列unique指數,你會很安全

+0

那麼,如何在插入前檢查重複記錄 –

0

你可能會尋找類似

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

???

+0

爲什麼downvote?這是正確答案,ANSI SQL,AFAIK。 –

1

如果該行存在,您可以使用INSERT IGNORE無提示失敗。它會嘗試插入,但如果密鑰存在,它將不會執行任何操作。

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

你可能也想看看INSERT ... ON DUPLICATE KEY UPDATE