2011-12-17 11 views
2
SELECT KundeID, Kundenummer, Fornavn, Efternavn, Adresse, Postnummer, [By] 
FROM dbo.Kundeliste 
INNER JOIN Ordreliste 
ON Ordreliste.KundeID<>Kundeliste.KundeID 

私は正しい出力を得られません。まだカスタマーリストから注文していないすべての顧客が必要ですこれは何が問題なのですか?

+0

「SELECT ... from dbo.Kundeliste KundeID in(OrdrelisteからKundeIDを選択してください)」 – user685684

+1

まあ、INNER JOINは**既に**注文しているものを返すだけです - それがメインですあなたの質問に問題があります。マーティンの優れた答えを参照してください - それは行く方法です –

答えて

6

anti semi joinが必要です。これを行うための最も一般的な3つの方法は、NULLでフィルタリングするNOT EXISTS,NOT IN、およびOUTER JOINです。

それはNOT INがあり、一般的にthe most efficient planを取得することをNULL sの問題を避けるように私は、一般的にNOT EXISTSを使用しています。

SELECT KundeID, 
     Kundenummer, 
     Fornavn, 
     Efternavn, 
     Adresse, 
     Postnummer, 
     [By] 
FROM dbo.Kundeliste 
WHERE NOT EXISTS (SELECT * 
        FROM Ordreliste 
        WHERE Ordreliste.KundeID = Kundeliste.KundeID) 

<>条件の現在のクエリは、ほぼ完全なデカルト/クロス結合を実行します。 dbo.Kundelisteの各行については、同じKundeIDまたはKundeIDがnullであるものを除いて、Ordrelisteの行すべてに参加します(を除く)。

+0

また:http://dba.stackexchange.com/a/4010/630 – gbn

+1

Thx百万! :) –

関連する問題