Как сделать логическое И при селекте в Many-to-many? - MySQL
Формулировка задачи:
Доброго всем времени суток! Есть стандартная схема таблицы типа
category_product
---------------
id_category
id_product
product
---------------
id
name
category
---------------
id
name
То есть в category_product хранятся связи продуктов с категориями по их айдишникам. Подскажите, пожалуйста, как выбрать все продукты которые находятся ОДНОВРЕМЕННО в двух разных категориях. То есть пользователь хочет получить список товаров, которые принадлежат И категории с id = 1 И категории с id = 2. То есть товар должен одновременно находиться в обоих искомых пользователям категориях.
Решение задачи: «Как сделать логическое И при селекте в Many-to-many?»
textual
Листинг программы
SELECT Q1.id_product FROM (SELECT id_product FROM category_product WHERE id_category=1) Q1, (SELECT id_product FROM category_product WHERE id_category=2) Q2 WHERE Q1.id_product = Q2.id_product
Объяснение кода листинга программы
В этом коде выполняется операция объединения (JOIN) двух таблиц category_product
по полю id_product
. Это делается для того, чтобы получить все продукты, которые относятся к двум категориям одновременно.
SELECT Q1.id_product
- выбираем полеid_product
из первой подзапросной таблицыQ1
.FROM (SELECT id_product FROM category_product WHERE id_category=1) Q1, (SELECT id_product FROM category_product WHERE id_category=2) Q2
- выполняем два подзапроса, чтобы получить две отдельные таблицы сid_product
для категорий 1 и 2.WHERE Q1.id_product = Q2.id_product
- объединяем две таблицы по полюid_product
и выбираем только те строки, гдеid_product
из первой таблицы равенid_product
из второй таблицы. Этот запрос вернет всеid_product
, которые относятся одновременно к двум указанным категориям.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д