Products、Tags、products_tags (Products と Tags の間の多対多) の 3 つのテーブルがあります。私のスキーマでは、製品にはゼロから多数のタグを含めることができ、タグにはゼロから多数の製品を含めることができます。特定のタグが付いている商品と、特定のタグが付いていない商品を選択したいと考えています。
製品表:
idproducts / 名前
1 / サムスンギャラクシー
2 /サムスンノート1
3 /サムスンノート2
4 / iphone 4gs
タグ表:
idtags / 単語
1 / サムスン
2 / ギャラクシー
3 / 注1
4 / 注2
5 / アイフォン
6/4gs
7 / りんご
Products_Tags テーブル:
商品・タグ
1 / 1
1 / 2
2 / 1
2 / 3
3 / 1
3 / 4
4 / 5
4 / 6
以下のクエリがありますが、他のタグがあり、結合の結果として結果セットに表示されるため、不要なタグが付いた製品が表示されます。
SELECT * FR0M 製品 AS p
JOIN products_tags AS pt ON pt.product = p.idproducts JOIN tags AS t ON t.idtags = pt.tag WHERE t.word IN ('samsung', 'mobile') AND t.word NOT IN ('note1', 'note2')
Samsung Galaxy が必要で、「samsung」のようなタグを定義し、「note1」と「note2」を持たないように定義した場合。これに対するクエリは何でしょうか。
PSおそらく EXISTS または NOT EXISTS を使用する必要があると思いましたが、それらをどのように使用すればよいかわかりません。
前もって感謝します