쿼리에 제공된 식별자 중 테이블에 존재하지 않는 고유 식별자를 쉽게 확인할 수 있기를 원합니다.
더 잘 설명하기 위해, 테이블에 존재하지 않는 목록 “1, 2, 3, 4″의 ID를 확인하기 위해 지금 내가 할 일이 있습니다.
SELECT * FROM dbo."TABLE" WHERE "ID" IN ('1','2','3','4')
테이블에 ID 2 인 행이 없다고 가정 해 보겠습니다.- 결과를 Excel로 덤프
- 결과 목록에서 각 목록 값을 검색하는 원래 목록에서 VLOOKUP을 실행하십시오.
- 결과로
#N/A
나오는 VLOOKUP 은 테이블에서 발생하지 않은 값에 있습니다.
더 좋은 방법이 있어야한다고 생각합니다. 이상적으로는 다음과 같은 것을 찾고 있습니다.
확인할 목록-> 확인할 테이블 쿼리-> 테이블에없는 목록의 멤버
답변
사용 EXCEPT
:
SELECT * FROM
(values (1),(2),(3),(4)) as T(ID)
EXCEPT
SELECT ID
FROM [TABLE];
SqlFiddle을 참조하십시오 .
values
생성자는 SQL 서버 2008 이상에서 작동합니다. 2005 년에는
SELECT 'value'
UNION SELECT 'value'
이 SO 답변에 자세히 설명되어 있습니다.
답변
검색중인 ID가 포함 된 테이블 변수 또는 임시 테이블을 작성하고 2008 구문 구문을 뺀 Remus의 솔루션을 사용하십시오.
declare @t table (ID int)
insert into @t values (1)
insert into @t values (2)
insert into @t values (3)
insert into @t values (4)
insert into @t values (5)
select ID from @t
except
select ID
from [Table];
답변
나는 지금이 질문을 할 때보 다 몇 년 더 현명하고 최신 SQL Server를 보유하고 있습니다. (그 EXCEPT
이후로 연산자를 사용한 적이 없다고 생각 합니다.)
CTE가 필요없이 다른 조인으로 구성 할 수 있기 때문에 LEFT JOIN
아래 방법이 더 유용 하다고 말합니다 EXCEPT
.
SELECT v.val
FROM (VALUES (1), (2), (3), (4), (5)) v (val)
LEFT JOIN dbo.SomeTable t
ON t.id = v.val
WHERE t.id IS NULL;