2011-11-28 40 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