2012-03-05 3 views
2

나는 글을 쓰려고하는데, 내가 찾고있는 논리는 근본적이다. 표 1의 사용자 ID가 표 2에 없으면 결과에있는 사용자 ID를 표시합니다. 그래서 내가 그랬어 :ID의 결과를 반환하지 않음 특정 테이블

SELECT 
    UserColder.ContactName, 
    UserColder.Phone, 
    UserColder.Email, 
    UserColder.Website, 
    Country.Name, 
    UserColderZIP.[ZIP Code], 
    UserColderZIP.[State Abbreviation] 
FROM 
    dbo.UserColder 
    LEFT OUTER JOIN dbo.CountryUser 
    ON UserColder.ID = CountryUser.[User ID] 
    INNER JOIN dbo.Country 
    ON CountryUser.[Foreign ID] = Country.ID 
    LEFT OUTER JOIN dbo.UserColderZIP 
    ON UserColder.ID = UserColderZIP.UserColder 
WHERE 
    UserColder.ID NOT IN (CountryUser.[User ID]) 

그것은 Where없이 데이터를 반환하지만 Where와 나는 그것이 UserColder에서 이드 CountryUser의 모든 기록이없는 모든 결과를 표시하려고 노력하고있다. 지금은 아무 결과도 반환하지 않으며 ID 2가 거기에 존재하지 않는다는 것을 알고 있습니다. 내가 뭘 잘못하고 있는거야?

감사합니다.

답변

4

당신이 CountryUser에 존재하지 않는 UserColder에서 레코드를 얻을하는 LEFT OUTER JOIN을 가지고 있기 때문에, NULL을 확인합니다. 해당 값이없는 조인 된 행은 NULL을 반환합니다.

WHERE 
    CountryUser.[User ID] IS NULL 
+0

감사! 그건 의미가 있지만 누락 된 레코드는 반환하지 않습니다. 어느 것이 누락되었는지 보여줄 수 있습니까? –

+1

@ Justin 당신이 위에 무엇을 기반으로, 나는 그것이 올바르게 작동 기대합니다. 'dbo.Country'와'dbo.UserColderZIP'에 대한 열과 조인을 제거하여 디버그하여 'UserColder'와'CountryUser'에만 줄입니다. –

+0

Ah! 고마워, 지금 당장! :) –

0

그냥 UserColder의 정보를 움켜 잡고 UserColder.ID가 (에 select 문)를 확인하여 CountryUser에 있지 않은지 확인합니다.

SELECT 
    UserColder.ContactName, 
    UserColder.Phone, 
    UserColder.Email, 
    UserColder.Website, 
    Country.Name, 
    UserColderZIP.[ZIP Code], 
    UserColderZIP.[State Abbreviation] 
FROM 
    dbo.UserColder 
    INNER JOIN dbo.Country 
    ON CountryUser.[Foreign ID] = Country.ID 
    LEFT OUTER JOIN dbo.UserColderZIP 
    ON UserColder.ID = UserColderZIP.UserColder 
WHERE 
    UserColder.ID NOT EXISTS (select [user id] from dbo.CountryUser where CountryUser.[User ID]) 
+1

존재하지 않는 것이 더 나은 옵션, null 사용자 ID 값에 대한 쿼리 실패를 피하기 위해 –

+0

사실 :) 감사합니다 – Kyra

+0

고마워요! 그게 내가하려는 일이야. 나는 이것을 시도했지만 누락 된 레코드는 반환하지 않습니다. 어느 것이 누락되었는지 보여줄 수 있습니까? –

관련 문제