mysql和一个以上的列

时间:2013-12-11 11:40:32

标签: php mysql

SELECT DISTINCT group_id FROM mark_mapping 
WHERE subcat_id = 22 AND subcat_id = 30 AND subcat_id = 17 AND subcat_id = 18 AND subcat_id = 19

这是我的示例查询。如你所知......这不起作用。请帮帮我。

这里subcat_id可以重复10次以上。所有都是相同的列。

我想在这里提到我的表结构....

group_id subcat_id

12 -------> 7
12 -------> 8
12 -------> 9
12 -------> 10
13 -------> 7
13 -------> 11
14 -------> 8
14 -------> 9

等等..那么得到这个结果的正确是什么......

SELECT DISTINCT group_id FROM mark_mapping     WHERE subcat_id = 22 AND subcat_id = 30 AND subcat_id = 17 AND subcat_id = 18 AND subcat_id = 19

SELECT group_id 来自mark_mapping 在哪里subcat_id(22,30,17,18,19) group by group_id 有计数(不同的subcat_id)= 5

我知道AND语句正在寻找不同的列。任何人都可以告诉我如何将它用于柱子......

3 个答案:

答案 0 :(得分:3)

SELECT group_id 
FROM mark_mapping 
WHERE subcat_id in (22,30,17,18,19)
group by group_id 
having count(distinct subcat_id) = 5

SQLFiddle demo

答案 1 :(得分:1)

查询针对一行。您不能有一行,其中列具有2个或更多不同的值。您需要OR代替AND或更好IN(...)

SELECT DISTINCT group_id FROM mark_mapping 
WHERE subcat_id IN (22, 30, 17, 18, 19);

答案 2 :(得分:0)

您使用的是错误的操作符。

如果使用AND组合条件,则只有符合所有要求的行才会匹配。在这种情况下,这是不可能的。每行只能有一个subcat_id,因此subcat_id 223017,{{1}不能排成一行同时 18

您应该使用19运算符:

OR

其中,翻译成普通英语,说:

  

给我所有的行,其中subcat_id是22,30,17,18 OR 19。

在这种情况下,您还可以使用WHERE subcat_id = 22 OR subcat_id = 30 OR subcat_id = 17 OR subcat_id = 18 OR subcat_id = 19

简化查询
IN

这基本上会查找SELECT DISTINCT group_id FROM mark_mapping WHERE subcat_id IN (22, 30, 17, 18, 19) 存在的行 IN 所提供的值列表。