如何检索customer表中name与mobile重复出现的记录?
解决方案:检索重复的name与mobile组合记录
针对你的需求,这里提供两种实用的SQL查询方案,可根据你使用的数据库版本选择:
方法1:使用窗口函数(推荐,适合支持窗口函数的数据库)
这种方式无需额外关联,代码简洁高效:
SELECT cif, name, mobile FROM ( SELECT cif, name, mobile, -- 按name和mobile分组统计出现次数 COUNT(*) OVER (PARTITION BY name, mobile) AS occurrence_count FROM customer ) temp WHERE occurrence_count > 1 ORDER BY name, mobile, cif;
方法2:使用GROUP BY + JOIN(兼容低版本数据库)
如果你的数据库不支持窗口函数(比如MySQL 5.x),可以用这种方式:
SELECT c.cif, c.name, c.mobile FROM customer c INNER JOIN ( -- 先筛选出重复的name+mobile组合 SELECT name, mobile FROM customer GROUP BY name, mobile HAVING COUNT(*) > 1 ) duplicate_pairs ON c.name = duplicate_pairs.name AND c.mobile = duplicate_pairs.mobile ORDER BY c.name, c.mobile, cif;
结果说明
两种方法都会返回以下记录:
| CIF | NAME | MOBILE |
|---|---|---|
| 121 | ANT | 789 |
| 122 | ANT | 789 |
| 125 | BEE | 123 |
| 126 | BEE | 123 |
| 123 | ENT | 789 |
| 124 | ENT | 789 |
内容的提问来源于stack exchange,提问作者Bala S
相关产品推荐
相关产品推荐

