2010-02-10 3 views
2

값 목록이 있으며 어떤 값이 테이블에 없는지 알고 싶습니다. 내가 '고양이'와 '개'를 반환하는 쿼리를 작성해야테이블에없는 값은?

CREATE TABLE myTable (foo VARCHAR(10)) 
GO 

INSERT INTO myTable 
     (foo 
     ) 
     SELECT 'aaa' 
     UNION ALL SELECT 'bbb' 
     UNION ALL SELECT 'ccc' 
GO 

SELECT foo 
    FROM myTable 
    WHERE foo IN ('aaa', 'cat', 'bbb', 'dog') 
-- returns 'aaa' and 'bbb' 

: 다음 사항을 고려

(이것은 SQL 서버 2000)입니다.

SELECT foo 
    FROM myTable 
    WHERE foo ????? ('aaa', 'cat', 'bbb', 'dog') 
-- returns 'cat' and 'dog' 

쿼리에서이 작업을 수행하는 간단한 방법이 있습니까? 방법으로 응용 프로그램이 데이터베이스와 상호 작용으로 인해

, 나는, 말,

select foo from myTable 
WHERE NOT EXISTS (select 1 from myTable where foo in('cat', 'dog')); 

하지 않음 (사실, NOT EXISTS) 일을

+0

? 그렇다면 데이터베이스에서 이미 존재하는 것을 가져 와서 응용 프로그램에서 필터링을 수행 할 수 있습니다. 성능 저하가 눈에 띄지 않습니다. – Journey

답변

6

당신은 union all있는 테이블을 구성하고 조인 일치하지 않는 행을 필터링하는 조인 수 : 값 목록이 작은

SELECT  myList.foo 
FROM  (
       SELECT 'aaa' as foo 
       UNION ALL SELECT 'cat' 
       UNION ALL SELECT 'bbb' 
       UNION ALL SELECT 'dog' 
      ) myList 
LEFT JOIN myTable 
ON   myTable.foo = myList.foo 
WHERE  myTable.foo is null 
0

가 존재하는 임시 테이블입니다 만들 오히려하지 않는 게 좋을 가장 깨끗한 방법도 아니고 가장 깨끗한 방법도 아닙니다. Soehow, 효과가있을 수 있습니다.

+1

검색 할 특정 항목을 이미 알고있는 경우 ...이 쿼리가 필요하지 않습니다 .-) – Sukotto

+0

죄송합니다. 빠른 읽기 = 불완전한 물건 * alfabravo는 * – Alfabravo