PostgreSQL删除重复数据

php中文网
发布: 2016-06-07 14:58:25
原创
2067人浏览过

postgresql删除重复数据 去重的方法一般是找到重复数据中的一条,以某一唯一条件去掉其他重复值。 Oracle 去重的方法很多,常用的是根据 rowid 进行去重。 PostgreSQL 库如何去除单表重复数据呢?可以通过 ctid 进行,下面是实验过程。 一、创建测试表 david

postgresql删除重复数据

 

去重的方法一般是找到重复数据中的一条,以某一唯一条件去掉其他重复值。

 

Oracle 去重的方法很多,常用的是根据 rowid 进行去重。

 

PostgreSQL 库如何去除单表重复数据呢?可以通过 ctid 进行,下面是实验过程。

 

一、创建测试表

 

david=# create table emp (

david(# id int,

david(# name varchar);

CREATE TABLE

david=# 

 

二、插入测试数据

 

david=# insert into emp values (1, 'david');

INSERT 0 1

david=# insert into emp values (1, 'david');

INSERT 0 1

david=# insert into emp values (1, 'david');

INSERT 0 1

david=# insert into emp values (2, 'sandy');

INSERT 0 1

david=# insert into emp values (2, 'sandy');

INSERT 0 1

david=# insert into emp values (3, 'renee'); 

INSERT 0 1

david=# insert into emp values (4, 'jack');  

INSERT 0 1

david=# insert into emp values (5, 'rose'); 

INSERT 0 1

david=# 

 

三、查询初始化数据

 

david=# select ctid, * from emp;

 ctid  | id | name  

-------+----+-------

 (0,1) |  1 | david

 (0,2) |  1 | david

 (0,3) |  1 | david

 (0,4) |  2 | sandy

 (0,5) |  2 | sandy

 (0,6) |  3 | renee

 (0,7) |  4 | jack

 (0,8) |  5 | rose

(8 rows)

 

david=# 

 

查询重复数据数

 

david=# select distinct id, count(*) from emp group by id having count(*) > 1;

 id | count 

----+-------

  1 |     3

  2 |     2

vue+h5动态添加删除表格数据代码
vue+h5动态添加删除表格数据代码

vue+h5动态添加删除表格数据代码

vue+h5动态添加删除表格数据代码 104
查看详情 vue+h5动态添加删除表格数据代码

(2 rows)

 

david=# 

 

查询出 id 为1的记录有3条,id 为2的记录有2条。

 

四、查询要保留的数据

 

以 min(ctid) 或 max(ctid) 为准。

 

david=# select ctid, * from emp where ctid in (select min(ctid) from emp group by id);

 ctid  | id | name  

-------+----+-------

 (0,1) |  1 | david

 (0,4) |  2 | sandy

 (0,6) |  3 | renee

 (0,7) |  4 | jack

 (0,8) |  5 | rose

(5 rows)

 

david=# 

 

五、删除重复数据

 

david=# delete from emp where ctid not in (select min(ctid) from emp group by id);

DELETE 3

david=# 

 

六、查看最后结果

 

david=# select ctid, * from emp;

 ctid  | id | name  

-------+----+-------

 (0,1) |  1 | david

 (0,4) |  2 | sandy

 (0,6) |  3 | renee

 (0,7) |  4 | jack

 (0,8) |  5 | rose

(5 rows)

 

david=# 

 

说明:如果表中已经有标明唯一的序列主键值,可以把该值替换上述的ctid直接删除。

 

七、其他方法

 

也可以使用以下SQL删除重复数据。

 

david=# delete from emp a

david-# where a.ctid

david-# (

david(# select min(b.ctid) from emp b

david(# where a.id = b.id

david(# );

DELETE 3

david=# 

 

说明:在表数据量较大的情况下,这种删除方法效率很高。

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号