0

アウタージョインの理解に少し問題があると思います。これは学校関連の問題です。普段はここでは聞かないのですが、うまくいかないようです。

、およびその他の顧客情報Customerを含むテーブルがあります。また、、購入したもの、およびその数を含む、customerIDという名前のテーブルがあります。OrderscustomerID

ここで、何も購入していないすべての顧客をリストしたいと思います(つまり、顧客IDはOrdersテーブルにありません)。

手伝ってくれますか?

4

4 に答える 4

2
SELECT c.*
FROM Customer c
LEFT JOIN Order o USING (customerID)
WHERE o.customerID IS NULL
于 2012-09-16T14:59:06.033 に答える
2

この場合、外部結合を使用する必要はありません。代わりにこれを試してください

Select * From Customer Where CustomerId not in (Select CustomerId in Order)
于 2012-09-16T14:59:25.037 に答える
1

使用しているインデックスに応じて、これを行う方法はいくつかあります。

アウタージョイン

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番目と同じですが、それでも追加の顧客情報を取得できます。

于 2012-09-16T15:10:35.533 に答える
1
Select Customer.* From Customer
Left Join Order on Customer.ID = Order.CustomerID
Where Order.CustomerID is Null

基本的に、注文があるかどうかに関係なくすべての顧客を選択し(ストレート外部結合)、次に、どこで何かを注文したすべての顧客を除外するかを使用します。

where句がある場合とない場合で上記を試してみてください。

PSは、テーブル名がクエリの記述をPIAにするため、キーワードを使用しません。

于 2012-09-16T15:13:16.023 に答える