如何删除数据库中的重复行

如何删除数据库中的重复行,第1张

重复行就是有两条记录是一样的,如果该表有主键,那重复行就是除了主键之外其余列的值完全相同。为啥表中会出现重复行?按照我的看法,应该是只有两个途径:1程序逻辑错误,2用户的 *** 作问题。程序逻辑错误,那没啥好说的,只要能发现修改其他也挺简单的;用户不知情的情况下添加了相同的数据,比如我的系统中有个把联系人从excel文件导入数据库的功能,导入会耗时,抑或是界面卡住,用户可能没耐心再次点击导入,数据就重复导入了。当然我的问题很好解决,,因为是导入所以那些数据都是相邻的,况且我的每个表都有一个自增的id字段,所以,直接写个sql语句把那堆数据删掉(delete table where id x and id < y)当然解决问题的方式多种多样,我介绍另一种比较有技术含量一点的,因为不是每次数据库重复行都像是我这种情况,有时候重复行数目不定,在数据库中的位置是离散的,用下面的sql语句有点可行Delete table where Id not in (select max(ID) from User group by field)我稍微解释一下上面这句的含义,1以某个字段为分组依据,相同的数据就被分到一组,2取得每个分组的最大id,也就是得到数据库行唯一的id集合,3删除不在这个id集合的数据库行。。。。等等,如果直接拿上面的sql语句去数据库中运行,那会有大麻烦,为啥呢?因为,我们不能确定某个字段值在表中是否是唯一的,比如名字,总有同名的人存在,,,额,你可能会说:id就不会重复了,但是对我们这个有啥意义,如果在数据库中id被设置成唯一的,那根本就不可能存在重复的id,你在插入重复的id时,数据库已经报错不允许你插入,也就不会出现重复了。。。。所以说上面的sql有点小问题,正确的思路就是把上面的第1步改为:根据表中除唯一键之外的所有字段进行分组。就能完美的删除表中的重复行了,,,不过,这个性能嘛。。。。当我没说。。。。

直接拿1楼的来改吧,

delete from zhszty_ebook

where id not in(

select from (select max(id) from zhszty_ebook group by url

) as tmp);------------mysql有个特性,对于表进行修改,删除 *** 作,子查询不能和外层的查询的表一样,所以在加个select就可以了。其他数据库按照楼上的那个是没问题的

distinct 关键字可从 select 语句的结果中消除重复的行。如果没有指定 distinct,将返回所有行,包括重复的行。

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。

数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。

数据库,简单来说是本身可视为电子化的文件柜--存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等 *** 作。

数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度的特点、是与应用程序彼此独立的数据集合。

在经济管理的日常工作中,常常需要把某些相关的数据放进这样的"仓库",并根据管理的需要进行相应的处理。

例如,企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成是一个数据库。

有了这个"数据仓库"我们就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。这些工作如果都能在计算机上自动进行,那我们的人事管理就可以达到极高的水平。

此外,在财务管理、仓库管理、生产管理中也需要建立众多的这种"数据库",使其可以利用计算机实现财务、仓库、生产的自动化管理。

这个问题就是要删除表中重复的记录,查询的sql语句如下:\x0d\select id,name from (\x0d\select id,name,row_numer() over(partition by id,name order by id,name) rn from tableA)\x0d\where rn>1;\x0d\删除的sql语句如下:\x0d\DELETE tableA WHERE ROWNUM = (SELECT ROWNUM\x0d\ FROM (SELECT id,name,\x0d\ ROW_NUMBER() OVER(PARTITION BY id,name ORDER BY id,name) RN\x0d\ FROM tableA )\x0d\ WHERE RN > 1);

首先,先说明一个问题。这样的结果出现,说明系统设计是有问题的。

其次

删除重复数据,你要提供你是什么数据库。

不同数据库会有不同的解决方案。

关键字Distinct 去除重复,如下列SQL,去除Test相同的记录;

1 select distinct Test from Table

2 如果是要删除表中存在的重复记录,那就逻辑处理,如下:

3 select Test from Table group by Test having count(test)>1

4 先查询存在重复的数据,后面根据条件删除

还有一个更简单的方法可以尝试一下:

select aid, count(distinct uid) from 表名 group by aid

这是sqlserver 的写法。

如图一在数据表中有两个膀胱冲洗重复的记录。

2

可以通过sql语句“select from 表名 where 编码 in(select 编码 from 表名 group by 编码 having count(1) >= 2)”来查询出变种所有重复的记录如图二

3

通过sql语句"

delete from 表名 where

编码 in(select 编码 from 表名 group by 编码 having count(1) >= 2)

and 编码 not in (select max(编码)from 表名 group by 编码 having count(1) >=2)

"来删除重复的记录只保留编码最大的记录

法一: 用Group by语句 此查找很快的select count(num), max(name) from student –查找表中num列重复的,列出重复的记录数,并列出他的name属性group by numhaving count(num) >;1 –按num分组后找出表中num列重复,即出现次数大于一次delete from student(上面Select的)这样的话就把所有重复的都删除了。—–慎重法二:当表比较大(例如10万条以上)时,这个方法的效率之差令人无法忍受,需要另想办法:—- 执行下面SQL语句后就可以显示所有DRAWING和DSNO相同且重复的记录SELECT FROM EM5_PIPE_PREFABWHERE ROWID!=(SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB D –D相当于First,SecondWHERE EM5_PIPE_PREFABDRAWING=DDRAWING ANDEM5_PIPE_PREFABDSNO=DDSNO);—- 执行下面SQL语句后就可以删除所有DRAWING和DSNO相同且重复的记录DELETE FROM EM5_PIPE_PREFABWHERE ROWID!=(SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB DWHERE EM5_PIPE_PREFABDRAWING=DDRAWING ANDEM5_PIPE_PREFABDSNO=DDSNO);法一: 用Group by语句 此查找很快的select count(num), max(name) from student –查找表中num列重复的,列出重复的记录数,并列出他的name属性group by numhaving count(num) >;1 –按num分组后找出表中num列重复,即出现次数大于一次delete from student(上面Select的)这样的话就把所有重复的都删除了。—–慎重法二:当表比较大(例如10万条以上)时,这个方法的效率之差令人无法忍受,需要另想办法:—- 执行下面SQL语句后就可以显示所有DRAWING和DSNO相同且重复的记录SELECT FROM EM5_PIPE_PREFABWHERE ROWID!=(SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB D –D相当于First,SecondWHERE EM5_PIPE_PREFABDRAWING=DDRAWING ANDEM5_PIPE_PREFABDSNO=DDSNO);—- 执行下面SQL语句后就可以删除所有DRAWING和DSNO相同且重复的记录DELETE FROM EM5_PIPE_PREFABWHERE ROWID!=(SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB DWHERE EM5_PIPE_PREFABDRAWING=DDRAWING ANDEM5_PIPE_PREFABDSNO=DDSNO);

以上就是关于如何删除数据库中的重复行全部的内容,包括:如何删除数据库中的重复行、mysql数据库删除重复数据、SQL数据库查询去除重复的关键字是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9353656.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存