2014-05-15 32 views
0

我有这样的SQL查询:MySQL的选择项目不返回任何结果

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 

的表格:

Unfortunally,则返回0结果。当我替换AND whith OR时,它工作正常,但我希望在这两个类别中都能得到所有的结果。它也可以是3,4,5 ...类别。我怎样才能得到正确的结果?

+0

IN(X,Y)GROUP BY N的有COUNT(*)= 2;另外,这是一个INNER JOIN – Strawberry

+0

我添加了[tag:relational-division]标签。按照该标签描述此类查询和解决方案。 –

+0

@Strawberry:你可以使用INNER JOIN表示Raging Bull的查询,而不是'IN(x,y)GROUP BY n HAVING COUNT(*)= 2'吗? – Dong3000

回答

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 
+0

@Downvoter:编辑我的答案。小心删除downvote? –

+0

这似乎工作,thx! downvote不是我,对不起... – Dong3000

+0

摆脱左连接和点都是你的;-) – Strawberry

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 
+0

打我到它... – Madmenyo

+1

供参考,OP说:当我替换并whith OR,它的工作原理精细。但我想要获得**这两个类别中的所有**。 –