2014-02-26 3 views
2

if exists 문을 사용하려고하는데 문제가 있습니다. LOCATION과 NAME이 NEWTABLE에 있는지 확인하고 있습니다. 존재하지 않으면 NewTable에 삽입하려고합니다. 그래서 기본적으로 OldTable에는 레코드가 있지만 newTable에는없는 Location과 Names를 찾으려고합니다. 이 그SQL에 존재하지 않는 경우 사용 방법

create unique index NewTable_Location_Name on NewTable(Location, Name); 

참고 : 또한 고유 인덱스를 구축하여 이러한 제한을 적용 할 수

INSERT INTO NewTable(Location, Name) 
     SELECT Location, Name 
     FROM OldTable ot 
     WHERE NOT EXISTS (select 1 
          from NewTable nt 
          where nt.LOCATION = ot.LOCATION and nt.NAME = ot.NAME 
         ); 

: 감사
다음은이에 대한 not exists을 사용하는 것이 내 SQL

INSERT INTO NewTable(Location, Name) 
      SELECT Location, Name 
      FROM OldTable 
      WHERE Location and Name NOT IN (select Location, Name from NewTable) 
+0

오라클 구문에 가깝습니다. Oracle SQL은 WHERE (위치, 이름) NOT IN (위치 선택, NewTable의 이름) 튜플을 사용할 수 있습니다. 대부분의 다른 dbms에는이 기능이 없으므로 대신 Gordon Linoff가 제시 한대로 EXISTS를 사용해야합니다. –

+2

질문 제목에 이미 해결책이 포함되어 있다면 나는 항상 놀랐습니다. '(NOT) EXISTS'가 눈에 띄게 자주 나타납니다. –

답변

6

입니다 중복이 발생하면 오류가 발생합니다 (추가 검사없이).

+0

이것은 실제 이름이 아닌 단지 예일뿐입니다 – moe

+0

"조건이 예상되는 컨텍스트에 지정된 부울 유형이 아닌 표현식"이라는 오류가 발생합니다. – moe

관련 문제