2012-03-05 5 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なししかし、私はそれがUserColderからIdがCountryUserですべてのレコードを持っていないすべての結果を表示するために取得しようとしていますWhereでデータを返します。今は結果が返ってこないし、ID2がそこに存在しないことが分かっている。私が間違って何をしているのか?

ありがとうございます!

答えて

4

に存在しないUserColderのレコードを取得するにはLEFT OUTER JOINがあるので、NULLをチェックしてください。対応する値を持たない結合された行はNULLを返します。

WHERE 
    CountryUser.[User ID] IS NULL 
+0

ありがとうございます!それは理にかなっていますが、欠けているもののレコードは返されません。どちらが欠けているかを示すことは可能ですか? –

+1

@Justin上記の内容に基づいて、正しく動作することが期待されます。 'dbo.Country'と' dbo.UserColderZIP'への列と結合を削除してデバッグし、 'UserColder'と' CountryUser'にのみ減らしてください。 –

+0

ああ!ありがとう、私は今それを得た! :) –

0

だけ(でステートメントを選択)UserColderから情報を取得し、UserColder.IDがそれをチェックすることにより、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

true :)ありがとう – Kyra

+0

ありがとう!それは私がやろうとしていることです。私はこれを試しましたが、欠けているもののレコードを返しません。どちらが欠けているかを示すことは可能ですか? –

関連する問題