You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何查询同时匹配catid1、2、6的用户,不排除其他关联类别

正确SQL实现方案

核心思路

要筛选同时持有多个指定类别的用户,不能直接对单条记录加多个AND条件,而是通过分组聚合实现筛选:

  • 先过滤出所有属于目标catid(1、2、6)的分类记录
  • 按用户ID分组,统计每个用户对应的去重catid数量
  • 保留数量刚好等于目标catid总数(3)的用户,即为同时持有三个类别的用户

仅查询符合要求的用户ID

SELECT USERID
FROM category
WHERE CATID IN (1, 2, 6)
GROUP BY USERID
HAVING COUNT(DISTINCT CATID) = 3;

如果你的业务中同一个USERID和CATID不会产生重复记录,可以去掉DISTINCT提升查询效率。

关联查询获取用户完整信息

如果需要同时返回用户的姓名等字段,可以关联user表查询:

SELECT u.*
FROM user u
JOIN category c ON u.ID = c.USERID
WHERE c.CATID IN (1, 2, 6)
GROUP BY u.ID, u.FIRSTNAME
HAVING COUNT(DISTINCT c.CATID) = 3;

基于你提供的测试数据,上述查询只会返回ID为1的JOHN用户,符合需求。

内容的提问来源于stack exchange,提问作者ArtFranco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 04:57:01