MySQL如何仅返回Part ID出现2次及以上的行?
解决方法
要筛选出Part ID出现次数超过1次的行,你需要先找出所有出现次数大于1的Part ID,再基于这些ID去原表中获取对应的完整行,以下是两种可行的写法:
方法一:使用IN子句配合子查询
先通过子查询统计每个Part ID的出现次数,筛选出符合条件的ID,再在主查询中匹配这些ID:
SELECT part_id, company FROM MyTable WHERE part_id IN ( SELECT part_id FROM MyTable GROUP BY part_id HAVING COUNT(*) > 1 );
方法二:使用JOIN关联统计结果
将统计出的符合条件的Part ID作为临时表,通过JOIN和原表关联获取目标行:
SELECT t.part_id, t.company FROM MyTable t JOIN ( SELECT part_id FROM MyTable GROUP BY part_id HAVING COUNT(*) > 1 ) cnt ON t.part_id = cnt.part_id;
为什么直接用COUNT(*)无效?
你之前尝试的COUNT(*)如果没有配合GROUP BY part_id,只会统计整个表的行数;即使分组后,单独的统计查询只能返回Part ID和对应的次数,无法直接得到原表的完整行数据。所以必须先筛选出符合条件的Part ID集合,再关联原表获取所需内容。
内容的提问来源于stack exchange,提问作者Darin H
相关产品推荐
相关产品推荐

