欢迎投稿

今日深度:

删除重复的记录

删除重复的记录


因是手动录入数据,所以经常会产生重复的数据,这时就需要删除多余的数据。
 
创建测试用表:
 
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);
 
执行结果和上面一样。

www.htsjk.Com true http://www.htsjk.com/oracle/23791.html NewsArticle 删除重复的记录 因是手动录入数据,所以经常会产生重复的数据,这时就需要删除多余的数据。 创建测试用表: CREATE TABLE dupes( id integer, name varchar(10) ); INSERT INTO dupes VALUES(1, TOM); INSE...
相关文章
    暂无相关文章
评论暂时关闭