Как сделать логическое И при селекте в 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, которые относятся одновременно к двум указанным категориям.