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

MySQL多表关联查询:如何筛选购买2件及以上商品的用户uid

前提说明

先明确三张表符合业务逻辑的常规关联字段设计:

  • User表主键为uid(用户唯一标识)
  • Item表主键为iid(商品唯一标识)
  • Purchase表为购买记录表,同时存储uid(关联User表)、iid(关联Item表),单条记录代表用户购买一件商品的记录

不同场景的查询实现

场景1:无需筛选商品类型,直接统计所有购买2件及以上商品的用户

直接对Purchase表做分组聚合即可,无需关联其他表:

SELECT uid
FROM Purchase
GROUP BY uid
HAVING COUNT(*) >= 2;

逻辑:按用户ID分组后,统计每个用户的购买记录数,过滤出记录数≥2的用户ID即可。

场景2:需要筛选特定类型的商品(对应你提到的Item表itype筛选需求)

关联Purchase和Item表,先过滤出符合类型的商品购买记录,再分组统计:

SELECT p.uid
FROM Purchase p
INNER JOIN Item i ON p.iid = i.iid
WHERE i.itype = '替换为你要筛选的商品类型'
GROUP BY p.uid
HAVING COUNT(p.iid) >= 2;

场景3:需要确保返回的uid都是User表中存在的合法用户

额外关联User表,避免Purchase表脏数据导致返回不存在的用户ID:

SELECT u.uid
FROM User u
INNER JOIN Purchase p ON u.uid = p.uid
INNER JOIN Item i ON p.iid = i.iid
-- 可选添加商品类型筛选条件
WHERE i.itype = '替换为你要筛选的商品类型'
GROUP BY u.uid
HAVING COUNT(p.iid) >= 2;

核心逻辑说明

  • INNER JOIN用于关联匹配多张表的关联字段,只保留两边都匹配的有效记录
  • GROUP BY按用户ID做分组,用于针对每个用户做聚合统计
  • HAVING用于过滤分组后的聚合结果,WHERE无法直接过滤聚合计算的结果,所以必须用HAVING

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:54:03