2011-11-28 5 views
2

Iam이 레코드를 삽입 하려는데 테이블에 아직 없는지 확인하고 싶습니다.SQL NOT IN 함수

나는

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

을 시도하지만 당신은 INSERT 문에 WHERE 절을 가질 수 없습니다

+1

어떤 SQL Server를 사용하고 있습니까? – Trott

답변

2

를 살펴 할 수 있습니다 여러 레코드를 삽입하고자하는 경우 ...

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

오류 'incorrect syntax near where'을 보여줍니다, 당신은 단지 당신이 작업하는 경우 SELECT/UPDATE

WHERE 절을 MySQL, 당신은 다음과 같이 할 수 있습니다 :

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

그리고 당신은 이름 컬럼에 unique 인덱스가있는 경우, 당신은 아마

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

같은 뭔가를 찾고있을 것

+0

그래서, 어떻게 삽입 전에 중복 레코드를 확인할 수 있습니다 –

0

안전합니다 ???

+0

왜 downvote? 이것은 정답과 ANSI SQL, AFAIK입니다. –

1

행이있는 경우 INSERT IGNORE을 사용하여 자동으로 실패 할 수 있습니다. 삽입을 시도하지만 키가 존재하면 아무것도하지 않습니다.

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

는 또한 당신은 다음처럼 가장 적합한 쿼리를 다음 한 번에 하나 개의 레코드를 삽입하는 경우 EMP 에 레코드를 삽입하는 쿼리를 사용할 수 있습니다 INSERT ... ON DUPLICATE KEY UPDATE