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语句正在寻找不同的列。任何人都可以告诉我如何将它用于柱子......
答案 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
答案 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
22
,30
,17
,{{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 所提供的值列表。