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

  1. SELECT Q1.id_product - выбираем поле id_product из первой подзапросной таблицы Q1.
  2. 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.
  3. WHERE Q1.id_product = Q2.id_product - объединяем две таблицы по полю id_product и выбираем только те строки, где id_product из первой таблицы равен id_product из второй таблицы. Этот запрос вернет все id_product, которые относятся одновременно к двум указанным категориям.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5