Просто для удовольствия, используйте одно условие в предложении HAVING
:
SELECT id_product
FROM yourTable
WHERE id_category BETWEEN 1 AND 5
GROUP BY id_product
HAVING
COUNT(DISTINCT CASE WHEN id_category IN (3, 4, 5)
THEN 3 ELSE id_category END) = 3;
Демо
Логика здесь заключается в том, чтобы сначала ограничить запрос только id_category
значениями (1,2,3,4,5)
. Затем мы утверждаем, но сначала сопоставляем id_category
значения (3,4,5)
с тем же единственным значением 3
. Утверждение состоит в том, что различное число сопоставленных значений id_category
равно 3
, что подразумевает, что 1
, 2
и (3,4,5)
все происходят для этого продукта.