문제

나는 백만 번 해본 일을 하려고 하는데 작동하지 않습니다. 왜 그런지 말해 줄 수 있는 사람이 있습니까?

이력서를 보낸 사람들을 위한 테이블이 있고 그 안에 이메일 주소가 있습니다...

나는 이 사람들 중 웹사이트에 가입하지 않은 사람이 있는지 알고 싶습니다.aspnet_Membership 테이블에는 웹 사이트에 가입한 모든 사람들이 있습니다.

고유한 이메일 주소를 가진 구직자는 9472명입니다.

이 쿼리는 1793개의 결과를 생성합니다.

select j.email from jobseeker j
join aspnet_Membership m on j.email = m.email

이는 웹사이트에 등록하지 않은 사람들의 이메일이 7679(9472-1793)개 있어야 한다는 것을 의미합니다.그 중 1793개가 일치했기 때문에 나머지는 일치하지 않을 것으로 예상됩니다...하지만 이에 대한 쿼리를 수행하면 아무것도 얻지 못합니다!

이 쿼리가 나에게 아무것도 제공하지 않는 이유는 무엇입니까 ???

select j.email 
from jobseeker j
where j.email not in (select email from aspnet_Membership)

어떻게 이것이 작동하지 않을 수 있는지 모르겠습니다. 기본적으로 "jobeeker 테이블에는 있지만 aspnet_Membership 테이블에는 없는 모든 이메일을 보여주세요..."라고 말합니다.

도움이 되었습니까?

해결책

최근 하위 쿼리가 때때로 null 값을 반환하는 매우 유사한 문제가 있었습니다.그런 다음 in 문은 null을 이상한 방식으로 처리하므로 항상 값과 일치한다고 생각하므로 쿼리를 다음과 같이 변경하면:

select j.email 
from jobseeker j
where j.email not in (select email from aspnet_Membership
                      where email is not null)

작동할 수도 있습니다....

다른 팁

거기에 중복된 내용이 많이 있을 수 있습니다.내 머리 꼭대기에서 쿼리 오류가 보이지 않지만 다음과 같이 작성해 볼 수 있습니다.

SELECT j.email
FROM jobseeker j
LEFT JOIN aspnet_Membership m ON m.email = j.email
WHERE m.email IS NULL

중복을 제거하기 위해 거기에 GROUP BY 또는 DISTINCT를 넣을 수도 있습니다.

당신은 사용할 수 있습니다 exists 대신에 in 이와 같이:

Select J.Email
From Jobseeker j
Where not exists (Select * From aspnetMembership a where j.email = a.email)

사용할 때 더 나은 성능을 얻고 '이상한' 동작(널 값/결과와 관련된 것으로 의심됨)을 피해야 합니다. in.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top