MySQL GROUP BY查询失效:如何筛选同时满足双id_funz的id_type
解决MySQL GROUP BY筛选同时满足多条件的id_type问题
嘿,我来帮你拆解一下你遇到的问题~ 首先你写的语句有两个核心问题:语法错误和逻辑偏差,咱们一个个说:
1. 你的语句为什么不生效?
语法错误
你写的语句里括号配对有问题,而且GROUP BY的位置也不对。原语句:
SELECT * FROM table WHERE (id_funz = 26 AND state = 1) and ((id_funz= 28 AND state = 1) group by id_type
这里((id_funz= 28 AND state = 1)少了闭合的括号,而且GROUP BY必须放在WHERE子句之后,整体语法不合法,数据库会直接报错。
逻辑错误
更关键的是,你用AND连接了id_funz=26和id_funz=28这两个条件——但单条记录的id_funz不可能同时等于26和28啊!这就像找一个既是苹果又是香蕉的水果,根本不存在,所以这个WHERE条件永远不会返回任何结果,更别说后续的GROUP BY了。
2. 正确的实现方法
我们要找的是同一个id_type下,同时存在两条记录:一条是id_funz=26且state=1,另一条是id_funz=28且state=1,这里给你两种常用的靠谱写法:
方法一:GROUP BY + HAVING 统计符合条件的条目
先筛选出所有符合两个条件之一的记录,再按id_type分组,最后用HAVING确保分组里包含了两个目标id_funz:
SELECT id_type FROM your_table -- 记得替换成你的真实表名 WHERE (id_funz = 26 AND state = 1) OR (id_funz = 28 AND state = 1) GROUP BY id_type HAVING COUNT(DISTINCT id_funz) = 2;
WHERE子句先把范围缩小到我们关心的两类记录GROUP BY id_type把相同id_type的记录归为一组HAVING COUNT(DISTINCT id_funz) = 2确保这个分组里同时有26和28这两个id_funz(DISTINCT去重后计数为2,就代表两个条件都满足)
方法二:EXISTS子查询验证
先找到所有有id_funz=26且state=1的id_type,再检查这些id_type是否存在对应的id_funz=28且state=1的记录:
SELECT id_type FROM your_table t1 WHERE id_funz = 26 AND state = 1 AND EXISTS ( SELECT 1 FROM your_table t2 WHERE t2.id_type = t1.id_type AND t2.id_funz = 28 AND t2.state = 1 );
这种方式逻辑更直观,适合理解“同时存在两种记录”的需求,而且如果表数据量很大,性能表现也不错。
内容的提问来源于stack exchange,提问作者Gino81
相关产品推荐
相关产品推荐

