2011-10-14 2 views
0
SELECT a.samAccountName 
FROM activeIds AS a 
WHERE NOT EXISTS (SELECT * 
        FROM #tmp1 AS b 
        WHERE a.samAccountName = b.userID) 
     AND a.samAccountName LIKE 'ysp%' 
ORDER BY a.samAccountName ASC; 
GO 

사용자 ID YSP0000에서 YSP9999를 채우는 임시 테이블을 만들었습니다. 이미 YSP ID로 채워진 기존 테이블 (activeIds)이 있습니다."존재하지 않음"이 결과를 표시하지 않습니까?

이미 기존 테이블 (activeIds)에 존재하지 않는 YSP ID를 출력하려고합니다.

YSP ID가 표시되지 않고 대신 다른 ID (예 : ZSP)가 표시됩니다.

ID를 표시하는 방법이 있습니까?

+0

여기에'zsp'가 어떻게 나타나는지 보지 마십시오. 당신의'WHERE ... LIKE 'ysp %''는 그것을 막아야합니다. 문제를 재현하는 예제 데이터를 제공하십시오. –

+0

방금 ​​코드에서 표를 전환하기로 결정했습니다 (예 : 스위치 # tmp1 및 samAccountName은 모든 장소에서 열과 동일 함) 사용되지 않은 모든 ID를 표시합니다. 도와 주셔서 감사합니다! – nhat

답변

1

나는 당신이 찾고있는 것이 NOT EXISTS이 아니라, NOT IN이라고 믿습니다. 다음과 같이 입력하십시오 :

ID가 임시 테이블에없는 계정 이름을 모두 선택합니다.

1

left outer join을 사용하여 동일한 결과를 얻을 수 있습니다.

select a.samAccountName 
from activeIds a 
    left outer join #tmp1 b on a.samAccountName = b.userID 
where b.userID is null -- don't exist in #tmp1 
     and a.samAccountName like 'ysp%' 
order by a.samAccountName 
관련 문제