博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
postgresql重复数据的删除
阅读量:6588 次
发布时间:2019-06-24

本文共 1603 字,大约阅读时间需要 5 分钟。

  hot3.png

今天在协助开发导表数据时发现有重复的数据,需要去重。去重的方法一般是找到重复数据中的一条,以某一唯一条件去掉其他重复值。oracle中常用的是根据rowid来做,PG中也有一个唯一字段ctid,也可以根据此来做,如果表里设置了oid,数据量不大的情况下也可以。当然如果表中有唯一的序列值,就更方便了。下面是以ctid来删除重复数据的测试。 测试数据
postgres=# create table test(id int,name varchar);CREATE TABLEpostgres=# insert into test values (1,'kenyon');INSERT 0 1postgres=# insert into test values (1,'kenyon');INSERT 0 1postgres=# insert into test values (1,'kenyon');INSERT 0 1postgres=# insert into test values (2,'kenyon_test');INSERT 0 1postgres=# insert into test values (2,'kenyon_test');INSERT 0 1postgres=# insert into test values (3,'test');INSERT 0 1postgres=# insert into test values (5,'test');INSERT 0 1postgres=# insert into test values (5,'jackson');INSERT 0 1postgres=# select ctid,* from test; ctid  | id |    name     -------+----+------------- (0,1) |  1 | kenyon (0,2) |  1 | kenyon (0,3) |  1 | kenyon (0,4) |  2 | kenyon_test (0,5) |  2 | kenyon_test (0,6) |  3 | test (0,7) |  5 | test (0,8) |  5 | jackson(8 rows)
查询要保留的数据,以min(ctid)或max(ctid)为准
postgres=# select ctid,* from test where ctid in (select min(ctid) from test group by id); ctid  | id |    name     -------+----+------------- (0,1) |  1 | kenyon (0,4) |  2 | kenyon_test (0,6) |  3 | test (0,7) |  5 | test(4 rows)
删除重复数据,查看最后结果
postgres=# delete from test where ctid not in (select min(ctid) from test group by id);DELETE 4postgres=# select ctid,* from test; ctid  | id |    name     -------+----+------------- (0,1) |  1 | kenyon (0,4) |  2 | kenyon_test (0,6) |  3 | test (0,7) |  5 | test(4 rows)
如果表中已经有标明唯一的序列主键值,可以把该值替换上述的ctid直接删除。

转载于:https://my.oschina.net/Kenyon/blog/64017

你可能感兴趣的文章
驱动外置+原版安装方式『XLOS_Windows8_Pro_X86纯净版_V1.0』
查看>>
php操作memcache的使用测试总结
查看>>
Oracle创建表语句(Create table)语法详解及示例
查看>>
如何利用系统自带的小工具制作特殊字符
查看>>
Java基础之Http协议的理解与总结
查看>>
SpringMVC+idea+maven搭建项目
查看>>
树形结构的数据库表Schema设计
查看>>
“如何学习”系列文章2007年全部文章索引
查看>>
Android Arcface人脸识别sdk使用工具类
查看>>
android studio单个工程文件的代理设置
查看>>
Agent admitted failure to sign using the key
查看>>
grep 应用
查看>>
我的友情链接
查看>>
Linux实验室 CentOS关机大法
查看>>
一行命令获取当前JVM所有可设置的参数以及当前默认值
查看>>
OSI七层与TCP/IP五层网络架构详解
查看>>
spring与struts2 mvc共存web.xml简单配置
查看>>
Android集成微信支付
查看>>
2015年终总结
查看>>
关于svn目录地址迁移
查看>>