-1

私はオンラインストアで働いています。クライアントから、カテゴリが割り当てられていない製品のリストを求められました。これは簡単だと思っていましたが、思ったほど簡単ではないようです。

私が探している 2 つのテーブルは、shop_products と shop_products_categories です。次の設定があります。

製品を購入する

  • ID、
  • 名前、
  • 説明、
  • 価格

製品カテゴリーを見る

  • shop_product_id
  • shop_category_id

私は試してみました

SELECT shop_product_id 
from shop_products_categories 
WHERE NOT EXISTS (SELECT name from shop_products)

しかし、それはカテゴリ テーブルからすべての ID を戻すように見えます。

正しい方向への助けやポイントをいただければ幸いです。

これの SQL Fiddle はこちらから入手できます

XEROX製品にはカテゴリがありません。一方、ジップバッグはそうです。

4

4 に答える 4

2

サブクエリを介して where NOT EXISTS を使用すると、通常、パフォーマンスが向上するわけではありませんが、機能します。より一般的なアプローチは、LEFT-JOIN を実行して NULL を探すことです (つまり、存在しません)。

select
      sp.id,
      sp.name,
      sp.description,
      sp.price
   from
      Shop_Products sp
         LEFT JOIN Shop_Products_Categories spc
            on sp.id = spc.shop_product_id
   where
      spc.shop_product_id is null
于 2013-05-28T11:22:00.557 に答える
1

このクエリを使用すると役立つ場合があります

SELECT * FROM shop_products WHERE id NOT IN (SELECT shop_product_id FROM shop_products_categories);
于 2013-05-28T11:10:19.607 に答える
0

あなたはこれを試すことができます、私は確信していません:

Select id from shopproducts where not exist (select s.id from shopproduct as s inner    
joinshop_products_categories)

2 つのテーブルの結合に存在しない productshop の ID を意味します

于 2013-05-28T11:12:01.587 に答える