Использование AND (OR) для выбора на основе нескольких значений строки - PullRequest
0 голосов
/ 20 мая 2019

Я хочу создать фильтр запроса, который использует AND и OR для таблицы отношения многих ко многим.

Таблица состоит только из 2 столбцов id_product и id_category

Я использую мой запрос, но он не работает:

SELECT id_product FROM id_category WHERE ( id_category = 1)  AND (id_category = 2) 
AND ( id_category = 3 OR id_category = 4 OR id_category = 5) GROUP BY id_product

Я хотел бы получить товары, которые находятся в категориях одновременно.Только идентификаторы товаров, которые находятся в категории 1 И 2 ​​И (3 или 4 или 5)

Ответы [ 2 ]

3 голосов
/ 20 мая 2019

Вы должны сгруппировать по id_product и поместить эти условия в предложение HAVING:

SELECT id_product 
FROM tablename
GROUP BY id_product 
HAVING 
  SUM(id_category = 1) > 0
  AND
  SUM(id_category = 2) > 0
  AND
  SUM(id_category IN (3, 4, 5)) > 0
2 голосов
/ 20 мая 2019

Просто для удовольствия, используйте одно условие в предложении 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) все происходят для этого продукта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...