我有这个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结果。当我替换AND和OR时,它工作正常,但我希望在这两个类别中得到所有这些。它也可以是3,4,5 ......类别。我怎样才能得到正确的结果?
答案 0 :(得分: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
答案 1 :(得分:0)
您的问题出在此处: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