Есть таблица product (id, name). Есть таблица product_option (id, product_id, option_id) У продукта могут быть несколько опций, а может и не быть вообще.
Как одним запросом получить список продукции у которых есть опции (option_id), скажем: 1, 14, 25?
SELECT p.id, p.name
FROM product AS p
JOIN product_option AS o
ON p.id = o.product_id AND o.option_id in(1, 14, 25)
GROUP BY p.id, p.name
HAVING count(1)=3
3 в условии HAVING это количество условий которые должны совпасть.
Будет работать при условии, что у продукта не может быть двух одинаковых опций. Ваша структура БД этого не гарантирует, т.к. уникальность наверняка только по полю id, таблицы product_option. Рекомендую вообще убрать поле id и primary key объявить составным, из двух оставшихся колонок primary key (option_id, product_id).
Можно поступить следующим образом
SELECT
p.id,
p.name
FROM
product AS p
JOIN
product_option AS o1
ON
p.id = o1.product_id AND
o1.option_id = 1
JOIN
product_option AS o2
ON
p.id = o2.product_id AND
o2.option_id = 14
JOIN
product_option AS o3
ON
p.id = o3.product_id AND
o3.option_id = 25
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости