В моей базе данных три таблицы:
Продукты
- id (int, первичный ключ)
- имя (варчар)
Метки
- id (int, первичный ключ)
- имя (варчар)
ProductTags
- product_id (int)
- tag_id (int)
Я делаю SQL-запрос, чтобы выбрать продукты с назначенными тегами с заданными идентификаторами:
SELECT * FROM Products
JOIN ProductTags ON Products.id = ProductTags.product_id
WHERE ProductTags.tag_id IN (1,2,3)
GROUP BY Products.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
Но это, очевидно, не работает, давая мне продукты с тегами (1,2,3), независимо от того, назначены они тегам (4,5,6) или нет. Возможно ли решить эту проблему одним запросом?