2017-11-05 16 views
1

オペレータを使用して、このSQLクエリをjoinからサブクエリに変換する方法を教えてください。私はこの質問を試験で尋ねられましたが、私はこれをはっきりと理解することができませんでした。結合の代わりにIN演算子でwhere句を使用する

SELECT DISTINCT category_name 
FROM categories c JOIN products p 
ON c.category_id = p.category_id 
ORDER BY category_name 

どのように動作するかについての説明は素晴らしいでしょう。 INを使用して おかげ

答えて

2

、クエリは次のようになります。

SELECT DISTINCT category_name 
FROM categories c 
WHERE c.category_id IN 
(
    SELECT products.category_id 
    FROM products  
) 
ORDER BY category_name 

INオペレータは基本的に複数のOR条件の省略形です。 この場合、categoriesの各レコードについて、サブクエリはcategory_idの商品を選択し、categories.category_idproducts.category_idのいずれかと等しいかどうかを確認します。それがあればそのレコードは結果セットに含まれ、そうでなければ結果セットから除外されます。

0

変換を実行すると、おそらくdistinctは必要ありません。おそらく、カテゴリのある表では、名前はすでにユニークです。

SELECT c.category_name 
FROM categories c 
WHERE c.category_id IN (SELECT p.category_id FROM products p) 
ORDER BY c.category_name 
関連する問題