アウタージョインの理解に少し問題があると思います。これは学校関連の問題です。普段はここでは聞かないのですが、うまくいかないようです。
、およびその他の顧客情報Customer
を含むテーブルがあります。また、、購入したもの、およびその数を含む、customerID
という名前のテーブルがあります。Orders
customerID
ここで、何も購入していないすべての顧客をリストしたいと思います(つまり、顧客IDはOrdersテーブルにありません)。
手伝ってくれますか?
アウタージョインの理解に少し問題があると思います。これは学校関連の問題です。普段はここでは聞かないのですが、うまくいかないようです。
、およびその他の顧客情報Customer
を含むテーブルがあります。また、、購入したもの、およびその数を含む、customerID
という名前のテーブルがあります。Orders
customerID
ここで、何も購入していないすべての顧客をリストしたいと思います(つまり、顧客IDはOrdersテーブルにありません)。
手伝ってくれますか?
SELECT c.*
FROM Customer c
LEFT JOIN Order o USING (customerID)
WHERE o.customerID IS NULL
この場合、外部結合を使用する必要はありません。代わりにこれを試してください
Select * From Customer Where CustomerId not in (Select CustomerId in Order)
使用しているインデックスに応じて、これを行う方法はいくつかあります。
アウタージョイン
SELECT a.customerid
FROM customer a
LEFT JOIN orders b
ON ( a.customerid = b.customerid )
WHERE b.customerid IS NULL
サブセットクエリ
SELECT customerid
FROM customer
WHERE customerid NOT IN (SELECT customerid
FROM orders)
違いを設定する
SELECT customerid
FROM customer
EXCEPT
SELECT customerid
FROM orders
最初の方法は実際にはパフォーマンスの点で最悪かもしれません。3番目の方法は私が思うに最も簡単ですが、顧客に関する追加情報を取得することはできません。2番目の方法はおそらくパフォーマンスの点で3番目と同じですが、それでも追加の顧客情報を取得できます。
Select Customer.* From Customer
Left Join Order on Customer.ID = Order.CustomerID
Where Order.CustomerID is Null
基本的に、注文があるかどうかに関係なくすべての顧客を選択し(ストレート外部結合)、次に、どこで何かを注文したすべての顧客を除外するかを使用します。
where句がある場合とない場合で上記を試してみてください。
PSは、テーブル名がクエリの記述をPIAにするため、キーワードを使用しません。