如何查询MySQL表中type_id与category组合的重复关联记录
解决itemTypes表重复关联记录的查询问题
没问题,我来帮你搞定这个需求!你现在需要的是找出type_id和category(这里特指cat1)组合下存在重复的所有具体记录,而不只是识别出有重复的type_id对吧?
方法一:使用窗口函数(推荐,支持现代数据库)
窗口函数可以轻松帮你在保留所有行数据的同时,统计每个分组的记录数,非常适合这种场景:
SELECT id, item_id, type_id, cat FROM ( SELECT id, item_id, type_id, cat, -- 按type_id和cat分组统计每个组合的记录数 COUNT(*) OVER (PARTITION BY type_id, cat) AS record_count FROM itemTypes WHERE cat = 'cat1' ) AS subquery -- 筛选出记录数≥2的重复组合对应的所有行 WHERE record_count >= 2;
方法二:使用子查询关联(兼容旧版本数据库)
如果你的数据库不支持窗口函数(比如MySQL 5.x及以下),可以用子查询先找出存在重复的type_id+cat组合,再关联查询具体记录:
SELECT id, item_id, type_id, cat FROM itemTypes WHERE cat = 'cat1' AND (type_id, cat) IN ( -- 先找出有重复的type_id+cat组合 SELECT type_id, cat FROM itemTypes WHERE cat = 'cat1' GROUP BY type_id, cat HAVING COUNT(*) >= 2 );
针对你的示例数据的执行结果
用上面任意一种方法,都会返回以下符合你期望的记录:
| id | item_id | type_id | cat |
|---|---|---|---|
| 1 | 100 | 5 | cat1 |
| 2 | 110 | 5 | cat1 |
| 5 | 125 | 5 | cat1 |
| 3 | 115 | 6 | cat1 |
| 6 | 130 | 6 | cat1 |
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

