在项目开发和维护过程中,经常会遇到数据库中存在重复数据,由此带来一系列的问题。于是“如何删除重复数据,并保留重复数据的一条记录”这样的需求就会经常在工作中遇到。而每次遇到这样的问题总是要重新整理sql,今天再次遇到这样的问题,决定还是记录下来,方便以后查阅。
目前工作的数据库是SQL Server 2008, 所以该方案只针对SQL Server有效。
大致思路: 通过Rank函数对可能存在重复值的columns进行分块Ranking (如下表)。随后对rank值大于1的记录进行删除。
ProductID Name LocationID Quantity Rank ----------- ---------------------- ------------ -------- ---- 494 Paint - Silver 3 49 1 495 Paint - Blue 3 49 1 493 Paint - Red 3 41 3 496 Paint - Yellow 3 30 4 492 Paint - Black 3 17 5 495 Paint - Blue 4 35 1 496 Paint - Yellow 4 25 2 493 Paint - Red 4 24 3 492 Paint - Black 4 14 4 494 Paint - Silver 4 12 5
大致的SQL 如下:
alter table tableName add sno int identity(1,1) delete from tableName where sno in ( select sno from ( select *, RANK() OVER ( PARTITION BY empid,name ORDER BY sno DESC )rank From tableName )T where rank>1 ) ALTER TABLE tableName DROP COLUMN sno
当然还有其他方法,诸如通过临时表之类的,下次用到再补充。
针对Oracle,可以通过rowid来实现相同的功能,示例如下:
DELETEFROM table WHERE rowid notin(SELECT MIN(rowid)FROM table GROUPBY column1, column2, column3);
相关推荐
sql 查出一张表中重复的所有记录数据 1.表中有id和name 两个字段,查询出name重复的所有数据 select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1) 2、...
删除数据库中重复的数据!! 详细SQL语句....
达梦数据库_SQL语言手册.pdf 数据库快照定义语句 数据库快照删除语句 第章数据查询语句和全文检索语句 单表查询 简单查询 带条件查询 集函数 情况表达式 连接查询 子查询 标量子查询 表子查询 派生表子...
该文档是本人在实验过程中遇到的一个需求,之后解决了,特此写一个文档,实现一条SQL语句删除数据库某一个表中重复的记录。(重复的记录只保留一条,其他的被删除)
根据autoID删除临时表#tmp中的重复数据,只保留每组重复数据中的第一条
1.1表是数据库中存储数据的基本单位 1 1.2数据库标准语言 1 1.3数据库(DB) 1 1.4数据库种类 1 1.5数据库中如何定义表 1 1.6 create database dbname的含义 1 1.7安装DBMS 1 1.8宏观上是数据-->database 1 1.9远程...
第1章 数据库与sql基础 1 1.1 数据库的基本概念 1 1.1.1 数据库的由来 1 1.1.2 数据库系统的概念 3 1.2 数据库系统的结构、组成及工作流程 3 1.2.1 数据库的体系结构 3 1.2.2 数据库系统的组成 4 1.2.3 ...
最近在做一个批量数据导入到MySQL数据库的功能,从批量导入就可以知道,这样的数据在插入数据库之前是不会进行重复判断的,因此只有在全部数据导入进去以后在执行一条语句进行删除,保证数据唯一性。 下面话不多说了...
《精通SQ:结构化查询语言详解》全面讲解SQL语言,提供...附录A SQL保留字 附录B 常用的SQL命令 附录C 关于运行环境的说明 C.1 SQL Server 2000 C.1.1 直接访问 C.1.2 从企业管理器访问 C.2 Oracle系统
–查看指定表的外键约束 select * from sysobjects ...delete news where patindex(‘%[0-9]%’,title)>0 –删除删去 字段 title值重复的行,且只保留 id 较小的这个 delete news where exists(select 1 from news t
二、 系统介绍 1. 系统简介 软件可自动完成SQL Server数据库和文档的数据定时自动备份,由用户选择对哪些数据库或文档进行数据备份,提供对备份、还原数据作业的管理、分析、日志跟踪等功能。...
实验1:书写一个最简单的sql语句,查询一张表的所有行和所有列 9 实验2:查询一张表的所有行,但列的顺序我们自己决定 10 实验3:查询表的某些列,在列上使用表达式 10 实验4:使用sqlplus,进入sqlplus并进行简单的...
1044.11.2 改变字段数据类型和大小 1054.11.3 改变表之间的关系 1064.12 复制和粘贴表 1074.13 疑难解答 1084.14 现实世界—数据库战略和表战术 108第5章 输入、编辑和验证表中的数据 1105.1 在Access表中输入测试...
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1...
sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表) (5) 数据记录统计函数: AVG(字段名) 得出一个表格栏平均值 COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据...
A、 数据和数据之间没有联系 B、数据有丢失 C、 数据量太大 D、存在重复的数据 14、关系数据库中的关键字段是指( ) A、能唯一决定关系的字段 B、不可改动的专用保留字 C、关键的很重要的字段 D、能唯一标识元组的...
1044.11.2 改变字段数据类型和大小 1054.11.3 改变表之间的关系 1064.12 复制和粘贴表 1074.13 疑难解答 1084.14 现实世界—数据库战略和表战术 108第5章 输入、编辑和验证表中的数据 1105.1 在Access表中输入测试...
1044.11.2 改变字段数据类型和大小 1054.11.3 改变表之间的关系 1064.12 复制和粘贴表 1074.13 疑难解答 1084.14 现实世界—数据库战略和表战术 108第5章 输入、编辑和验证表中的数据 1105.1 在Access表中输入测试...
1044.11.2 改变字段数据类型和大小 1054.11.3 改变表之间的关系 1064.12 复制和粘贴表 1074.13 疑难解答 1084.14 现实世界—数据库战略和表战术 108第5章 输入、编辑和验证表中的数据 1105.1 在Access表中输入测试...