【SQL】删除表中重复数据
2015-10-14 22:08
363 查看
已emp表为基础,复制创建一张表,用于试验:
select * from emp;
create table emp_copy as select * from emp;
insert into emp_copy select * from emp;
insert into emp_copy select * from emp;
很明显,emp_copy中比原来emp中每条记录重复了三次。那么如何删除这三条记录呢?
原理:要根据所有字段来分组再升序排序,然后求得每个组的排序序号不为1的rowid,再然后关联原表通过rowid删除这些记录即可:
delete from emp_copy
where rowid in (select newid
from (select rowid as newid,
a.empno,
a.ename,
a.job,
a.mgr,
a.hiredate,
a.sal,
a.comm,
a.deptno,
row_number() over(partition by a.empno, a.ename, a.job, a.mgr, a.hiredate, a.sal, a.comm, a.deptno order by rowid) as rid
from emp_copy a)
where rid <> 1);
需要注意的时候,在分组的字段中,不能出现非常规的类型列(如大字段lob类型)。
select * from emp;
create table emp_copy as select * from emp;
insert into emp_copy select * from emp;
insert into emp_copy select * from emp;
很明显,emp_copy中比原来emp中每条记录重复了三次。那么如何删除这三条记录呢?
原理:要根据所有字段来分组再升序排序,然后求得每个组的排序序号不为1的rowid,再然后关联原表通过rowid删除这些记录即可:
delete from emp_copy
where rowid in (select newid
from (select rowid as newid,
a.empno,
a.ename,
a.job,
a.mgr,
a.hiredate,
a.sal,
a.comm,
a.deptno,
row_number() over(partition by a.empno, a.ename, a.job, a.mgr, a.hiredate, a.sal, a.comm, a.deptno order by rowid) as rid
from emp_copy a)
where rid <> 1);
需要注意的时候,在分组的字段中,不能出现非常规的类型列(如大字段lob类型)。
相关文章推荐
- PostgreSQL customize inet_aton, inet_ntoa function in text type like MySQL.
- MySql学习笔记一
- PostgreSQL earth distance module
- 转载一:OSM-Web服务器(一) PostgreSql 配置以及osm2pgsql原始PBF数据导入
- oracle11g 导入导出
- PostgreSQL 在3D 数据内容管理中的应用
- 比较靠谱的修改MySQL编码的方法
- orafce extension for PostgreSQL, Oracle's compatibility functions and packages
- PostgreSQL (User defined Operator) UDO & Operator Optimization Information
- SQLAlchemy+MySQL入门
- PostgreSQL use UDF combine NoSQL DB's Computing Power
- 结巴分词
- use PostgreSQL async Notification as a chat group
- PostgreSQL partial/sub commit within function
- 数据库中文乱码问题
- PostgreSQL 逻辑复制插件 UDR,可以愉快的玩类似MySQL的binlog复制了。
- mysql 学习记录(十一)--事件调度器
- cgroup告诉你如何计算 PostgreSQL 数据库实例用了多少内存
- PostgreSQL jdbc 9.4 支持load balance 和 connection failover了
- 从文件系统恢复遗失的UNLOGGED table's datafile.