MySQL выбрать элемент из нескольких категорий не дает результатов
У меня есть этот SQL-запрос:
SELECT DISTINCT c.id, c.name
FROM cars c LEFT JOIN
_rel_cars_categories rcc ON c.id=rcc.car_id
WHERE (rcc.category_id=33 AND rcc.category_id=51)
AND c.status >=10
Столы:
К сожалению, он возвращает 0 результатов. Когда я заменяю И на ИЛИ, все работает нормально, но я хочу получить все, что есть в обеих этих категориях. Это также может быть 3, 4, 5... категорий. Как я могу получить правильный результат?
2 ответа
Решение
Чтобы выбрать автомобили с 33 и 51 как category_id, попробуйте это:
SELECT c.id, c.name
FROM cars c JOIN
_rel_cars_categories rcc ON c.id=rcc.car_id
WHERE rcc.category_id IN (33,51) AND c.status >=10
GROUP BY c.name
HAVING count( distinct rcc.category_id ) = 2
Ваша проблема здесь: WHERE (rcc.category_id=33 AND rcc.category_id=51)
,
Очевидно, что категория может быть только 33 или 51. То, что вы ищете, скорее всего, будет WHERE ID IN (33,51)
который затем возвратит совпадение для любого из предоставленных значений.
Итак, ваш последний запрос должен выглядеть так:
SELECT DISTINCT c.id, c.name
FROM cars c
LEFT JOIN _rel_cars_categories rcc ON c.id=rcc.car_id
WHERE rcc.category_id IN (33,51) AND c.status >=10