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
等等..那么得到这个结果的正确方法是什么...
从mark_mapping中选择不同的group_id 其中 subcat_id = 22,subcat_id = 30,subcat_id = 17,subcat_id = 18,subcat_id = 19
选择group_id从 mark_mapping其中 subcat_id 在 (22,30,17,18,19(按group_id分组计数(非重复subcat_id(= 5
我知道 AND 语句正在寻找不同的列。谁能告诉我如何将其用于专栏......
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
查询针对一行。不能有一行,其中列有 2 个或更多不同的值。您需要OR
而不是AND
或更好的IN(...)
:
SELECT DISTINCT group_id FROM mark_mapping
WHERE subcat_id IN (22, 30, 17, 18, 19);
您使用了错误的运算符。
如果使用 AND
组合条件,则仅当行满足所有要求时,才会匹配行。在这种情况下,这是不可能的。每行只能有一个subcat_id
,所以不能有一行同时subcat_id
22
、30
、17
、18
和19
。
应改用OR
运算符:
WHERE subcat_id = 22 OR subcat_id = 30 OR subcat_id = 17 OR subcat_id = 18 OR subcat_id = 19
翻译成简单的英语说:
给我所有subcat_id为 22、30、17、18 或 19 的行。
在这种情况下,您还可以使用 IN
来简化查询:
SELECT DISTINCT group_id
FROM mark_mapping
WHERE subcat_id IN (22, 30, 17, 18, 19)
这基本上是在提供的值列表中查找存在subcat_id
的行。