| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7225 人关注过本帖, 2 人收藏
标题:经典的删除重复记录问题总结。
取消只看楼主 加入收藏
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:991
专家分:4966
注 册:2013-2-16
结帖率:100%
收藏(2)
 问题点数:0 回复次数:5 
经典的删除重复记录问题总结。
最近有学生在问删除表中重复记录问题,本人对此问题曾做过一些研究,现在做一个总结,算是抛砖引玉吧。
另外本文只讨论用SQL语句来解决问题,至于用VFP代码来做,以前已有前辈做了完整的示例,就不重复了。
*--------------------正文--------------------*
本文总结了四种常用的部分删除重复记录(不全删除,有条件的保留)场景:
有一个表 [jlzz1] ,原始记录如下:
图片附件: 游客没有浏览图片的权限,请 登录注册


情况介绍完毕。下面开始出题:
1、      以学籍号为判断依据,相同学籍号的重复记录,删除其最后一条
程序代码:
DELETE FROM jlzz1 ;
      WHERE jlzz1.id IN ( ;
    SELECT m2.mid ;
      FROM ( ;
               SELECT xjh, ;
                      xm, ;
                      max(id) AS mid ;
                 FROM jlzz1 ;
                WHERE jlzz1.xjh IN ( ;
                          SELECT cChongfu.xjh ;
                            FROM ( ;
                                     SELECT jlzz1.xjh, ;
                                            jlzz1.xm, ;
                                            count( * ) AS ts ;
                                       FROM jlzz1 ;
                                      GROUP BY xjh, ;
                                               xm ;
                                     HAVING ts > 1 ;
                                 ) AS cChongfu ;
                      )  GROUP BY xjh, ;
                         xm ;
           )  AS m2 )
运行后效果:

搜索更多相关主题的帖子: 经典的 删除 重复记录 FROM SELECT 
2017-12-28 11:35
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:991
专家分:4966
注 册:2013-2-16
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

2、      以学籍号为判断依据,相同学籍号的重复记录,删除首条
程序代码:
DELETE FROM jlzz1 ;
      WHERE jlzz1.id IN ( ;
    SELECT m2.mid ;
      FROM ( ;
               SELECT xjh, ;
                      xm, ;
                      min(id) AS mid ;
                 FROM jlzz1 ;
                WHERE jlzz1.xjh IN ( ;
                          SELECT cChongfu.xjh ;
                            FROM ( ;
                                     SELECT jlzz1.xjh, ;
                                            jlzz1.xm, ;
                                            count( * ) AS ts ;
                                       FROM jlzz1 ;
                                      GROUP BY xjh, ;
                                               xm ;
                                     HAVING ts > 1 ;
                                 ) AS cChongfu ;
                      )  GROUP BY xjh, ;
                         xm ;
           )  AS m2 )
运行后效果:
图片附件: 游客没有浏览图片的权限,请 登录注册

2017-12-28 11:38
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:991
专家分:4966
注 册:2013-2-16
收藏
得分:0 
3、      以学籍号为判断依据,相同学籍号的重复记录,只保留最后一条
程序代码:
DELETE FROM jlzz1 ;
      WHERE jlzz1.id NOT IN ( ;
    SELECT m2.mid   FROM ( ;
               SELECT xjh,xm,max(id) AS mid ;
                 FROM jlzz1 ;
                GROUP BY xjh, xm ) AS m2)
运行后效果:
图片附件: 游客没有浏览图片的权限,请 登录注册

2017-12-28 11:40
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:991
专家分:4966
注 册:2013-2-16
收藏
得分:0 
4、      以学籍号为判断依据,相同学籍号的重复记录,只保留首条
程序代码:
DELETE FROM jlzz1 ;
      WHERE jlzz1.id NOT IN ( ;
    SELECT m2.mid   FROM ( ;
               SELECT xjh,xm,min(id) AS mid ;
                 FROM jlzz1 ;
                GROUP BY xjh, xm ) AS m2)
运行后效果:
图片附件: 游客没有浏览图片的权限,请 登录注册

2017-12-28 11:42
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:991
专家分:4966
注 册:2013-2-16
收藏
得分:0 
附:凡有重复记录的,一律删除(不保留):
程序代码:
DELETE FROM jlzz1 ;
      WHERE jlzz1.xjh  IN ( ;
    SELECT m2.xjh   FROM ( ;
               SELECT xjh,xm,count(*) AS ts ;
                 FROM jlzz1 ;
                GROUP BY xjh, xm having ts>1 ) AS m2)
运行后效果:
图片附件: 游客没有浏览图片的权限,请 登录注册

2017-12-28 11:43
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:991
专家分:4966
注 册:2013-2-16
收藏
得分:0 
*--------------------正文结束--------------------*
欢迎提出批评和建议。
为了 练习方便,干脆把 表也传一个上来:
jlzz1.zip (764 Bytes)



[此贴子已经被作者于2017-12-28 11:49编辑过]

2017-12-28 11:46
快速回复:经典的删除重复记录问题总结。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021730 second(s), 12 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved