mysql 和不止一次的列


mysql AND morethan one time for a column

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 2230171819

应改用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的行。