2017-06-15 8 views
1

私はMySQLには新しく、ジョインの仕組みを理解しようとしています。 私は2つのテーブル:categoriesproductsを持っていて、それぞれidnameフィールドです。 3番目の表は、category_idproduct_idのproduct_to_category(多対多)です。ジョインの理解:指定されたプロダクトを持たないカテゴリのリスト

特定の製品(ID = 5)を含むすべてのカテゴリをリストしたかったのです。これを行うには 、私は次のクエリを作っ:

 SELECT `categories`.`id`, `categories`.`name` 
     FROM `categories` 
     LEFT JOIN `product_to_category` 
     ON `categories`.`id` = `product_to_category`.`category_id` 
     WHERE `product_to_category`.`product_id` = 5 

それが逆に何かすることが可能である場合、私は疑問に思って:指定された製品が含まれていないすべてのカテゴリを一覧表示するには?

多くの感謝!

+0

がよろしいですあなたは_manyツーmany_関係を使用したいですか?私は2つのテーブルを作るでしょう:マスターテーブルとして 'categories'(' id'で)と詳細テーブルとして '製品'( 'id'と' category_id'で)。どう思いますか? –

+0

私は多くの異なるカテゴリに1つの製品を持ちたいので、それぞれのカテゴリには多くの製品があります。 –

答えて

0

は、私はこのためにnot exists演算子を使用したい:

SELECT c.`id`, c.`name` 
FROM `categories` c 
WHERE NOT EXISTS (SELECT * 
        FROM `product_to_category` ptc 
        WHERE c.`id` = ptc.`category_id` AND 
          ptc.`product_id` = 5) 
+1

ありがとう!それは私にとってかなりうまくいく! :) –

関連する問題