データベースに 3 つのテーブルがあります。
製品
- id (整数、主キー)
- 名前 (varchar)
タグ
- id (整数、主キー)
- 名前 (varchar)
製品タグ
- product_id (整数)
- tag_id (整数)
指定された ID のタグが割り当てられた製品を選択する SQL クエリを実行しています。
SELECT * FROM Products
JOIN ProductTags ON Products.id = ProductTags.product_id
WHERE ProductTags.tag_id IN (1,2,3)
GROUP BY Products.id
指定された ID を持つタグが割り当てられていない製品を選択できます。
SELECT * FROM Products
JOIN ProductTags ON Products.id = ProductTags.product_id
WHERE ProductTags.tag_id NOT IN (4,5,6)
GROUP BY Products.id
そのクエリを組み合わせて、特定のタグを持ち、他のタグを持たない製品を選択するにはどうすればよいですか? 私はこれをそのように達成しようとしました:
SELECT * FROM Products
JOIN ProductTags ON Products.id = ProductTags.product_id
WHERE ProductTags.tag_id IN (1,2,3)
AND ProductTags.tag_id NOT IN (4,5,6)
GROUP BY Products.id
しかし、明らかに機能しておらず、タグ (4,5,6) が割り当てられているかどうかに関係なく、タグ (1,2,3) を持つ製品が表示されます。1 つのクエリを使用してこの問題を解決することは可能ですか?