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

如何修改MySQL查询语句,筛选同时存在type_id=3和5的用户?

解决MySQL筛选同时拥有两种type_id用户的问题

嘿,我来帮你搞定这个查询问题!要找出同时拥有type_id=3和type_id=5的用户,最容易踩的坑就是直接写WHERE type_id = 3 AND type_id = 5——这肯定查不到任何结果,因为单条记录的type_id不可能同时是两个不同的值对吧?下面给你几种靠谱的修改方案,你可以根据自己的表结构和数据量选最合适的:

方法1:GROUP BY + HAVING(最常用)

这种方法先筛选出目标type_id的记录,按用户分组后,验证分组里是否包含两种type_id:

SELECT user_id
FROM your_table_name
WHERE type_id IN (3, 5)  -- 先缩小范围,只取type_id是3或5的记录
GROUP BY user_id
HAVING COUNT(DISTINCT type_id) = 2;  -- 确保分组里同时有3和5两种类型
  • 如果你的表中同一个用户同一个type_id只会出现一次,可以把COUNT(DISTINCT type_id)简化为COUNT(*) = 2,性能会更好。
  • 记得把your_table_name替换成你实际的表名,user_id替换成用户的唯一标识字段(比如uid之类的)。

方法2:自连接

通过把表和自身连接,匹配同一个用户下的两种type_id记录:

SELECT DISTINCT t1.user_id
FROM your_table_name t1
JOIN your_table_name t2 
  ON t1.user_id = t2.user_id  -- 匹配同一个用户
WHERE t1.type_id = 3 
  AND t2.type_id = 5;  -- 分别对应两种type_id
  • 用DISTINCT是为了避免同一个用户被多次返回(如果用户有多个3或5的记录)。

方法3:EXISTS子查询

先找到有type_id=3的用户,再验证这些用户是否存在type_id=5的记录:

SELECT DISTINCT user_id
FROM your_table_name t1
WHERE type_id = 3
AND EXISTS (
    SELECT 1
    FROM your_table_name t2
    WHERE t2.user_id = t1.user_id
      AND t2.type_id = 5
);
  • 这种方法在数据量较大时性能往往不错,因为EXISTS一旦找到匹配的记录就会停止查询,不需要遍历所有数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:04:22