zoukankan      html  css  js  c++  java
  • 删除重复的记录

    因是手动录入数据,所以经常会产生重复的数据,这时就需要删除多余的数据。

    创建测试用表:

    CREATE TABLE dupes(
        id integer,
        name varchar(10)
    );
    INSERT INTO dupes VALUES(1, 'TOM');
    INSERT INTO dupes VALUES(2, 'ALLEN');
    INSERT INTO dupes VALUES(3, 'ALLEN');
    INSERT INTO dupes VALUES(4, 'SMITH');
    INSERT INTO dupes VALUES(5, 'SMITH');
    INSERT INTO dupes VALUES(6, 'SMITH');
    
    SELECT * FROM dupes;
    

    可以看到“ALLEN”和“SMITH”这两个人的数据重复了,现在要求表中name重复的数据只保留一行,其他的删除。

    删除数据有好几种方法,下面介绍三种方法。

     

    方法一:通过name相同,id不同的方式来判断。

    sql代码如下:

    DELETE FROM dupes a
     WHERE EXISTS (SELECT 1
              FROM dupes b
             WHERE a.name = b.name
               AND a.id > b.id);
    
    SELECT * FROM dupes;
    

    执行结果如下:

     

    方法二:用ROWID来代替其中的id。

    sql代码如下:

    DELETE FROM dupes a
     WHERE EXISTS (SELECT 1
              FROM dupes b
             WHERE a.name = b.name
               AND a.ROWID > b.ROWID);
    

    执行结果如下:

     

    方法三:通过分析函数根据name分组生成序号,然后删除序号大于1的数据。

    sql代码如下:

    DELETE FROM dupes a
     WHERE ROWID IN (SELECT rid
                       FROM (SELECT ROWID as rid,
                                    ROW_NUMBER() OVER(PARTITION BY name ORDER BY id) AS seq
                               FROM dupes)
                      WHERE seq > 1);
    

    执行结果和上面一样。

  • 相关阅读:
    《架构师》反思:系统可靠性
    表现力(转)
    4月反思
    30天敏捷结果(10) 强化你的一周
    认真对待学习(2月反思)
    Sort By Double
    12月反思 组内设计评审会议
    WPF框架的内存泄漏BUG
    OpenExpressApp 框架结构(2)
    绑定子类的泛型基类,反模式?
  • 原文地址:https://www.cnblogs.com/minisculestep/p/4885276.html
Copyright © 2011-2022 走看看