精华内容
下载资源
问答
  • 2021-05-07 18:05:54

    数据重复,主要分为两种:

    一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如身份证号字段重复,而其他字段不一定重复或都重复可以忽略,毕竟我们只要保证身份证号在表中数据唯一。

    解决方法:

    (1)完全重复的记录

    得到无重复的记录

    select distinct * from tableName

    删除重复的记录(重复记录保留1条),可以按以下方法删除

    select distinct * into #Tmp from tableName
    drop table tableName
    select * into tableName from #Tmp
    drop table #Tmp

    (2)部分重复的记录

    发生这种重复的原因是表设计不周产生的,可以通过增加唯一索引列解决。

    这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下:(假设有重复的字段为身份证号,要求得到这身份证号唯一的结果集)

    -- 增加索引
    select identity(int,1,1) as autoID, * into #Tmp from tableName
    -- 取出不重复的索引
    select min(autoID) as autoID into #Tmp2 from #Tmp group by 身份证号
    -- 根据不重复的索引取出不重复的数据
    select * from #Tmp where autoID in(select autoID from #tmp2)

    最后一个select即得到了身份证号不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

    通常,我们可能不仅仅是为了这次数据获取,可能主要的还是对这张表重复数据做清洗,删除重复数据,可以加上下面语句,做一次delete:

    -- 从第一张表中删除重复数据
    delete from #Tmp where autoID not in(select autoID from #tmp2)

     

    更多相关内容
  • 今天群内有群友提出了一个问题,就是MySql中删除重复数据的问题,然后回答了一下,发现正好接触到了之前可能没关注的一点儿小知识,在此做下简要记录(哦对,昨天晚上在试用腾讯云数据库的时候还遇到一个问题,就是...

    今天群内有群友提出了一个问题,就是MySql中删除重复数据的问题,然后回答了一下,发现正好接触到了之前可能没关注的一点儿小知识,在此做下简要记录(哦对,昨天晚上在试用腾讯云数据库的时候还遇到一个问题,就是腾讯云数据库的Mysql对大小写是敏感的)。

    OK,接下来我们进入正题,首先我按照群友的数据结构创建了一张表,填充了一部分数据,结构如下图所示:

    那么我们首先来确定我们删除数据的时候的所需条件,首先找到所有重复的数据记录,使用如下sql语句进行

    select * from a group by cardno having count(cardno) > 1

    查询结果如下:

    9c48679183a6cee1e4de5d8c53c78d26.png

    查询出来的是所有重复数据的第一条记录,但是这个是我们需要保留的,所以条件变成了,(改用如下的sql语句查询,根据cardno查询)重复数据中不包含本条记录的结果删除:

    下午写的时候犯了个错误,这里已经更正

    查询语句如下:

    select id,cardno from a where cardno in (select cardno from a group by cardno having count(cardno)>1)

    and id not in(select min(id) from a group by cardno having count(cardno)>1)

    8e8a102fee9b838e9cde333782b03df2.png

    这些记录是我们需要删除的,OK,接下来我们就直接删除掉这些数据就OK了,我们根据id主键来删除,sql语句如下:

    delete from a where id in(select id from a where cardno in (select cardno from a group by cardno having count(cardno)>1)

    and id not in(select min(id) from a group by cardno having count(cardno)>1))

    执行结果如下:

    78c954fa563242d7d73cf3bb78ecbf04.png

    Oops!报错了,这条提示信息说的是,诶同学,在MySql里你不能先查询了然后再删除诶!哦,好吧,这个就只能等官方升级支持这个新特性了,但是我们现在就要解决这个棘手的问题啊,肿么办?我们用临时表来解决,然后我们的删除语句变成了,这个样子:

    delete from a where id in (select id from (select id from a where cardno in (select cardno from a group by cardno having count(cardno)>1)

    and id not in(select min(id) from a group by cardno having count(cardno)>1)) as tmpresult)

    执行,OK,可以看到我们上面查询的出来要删除的6条重复数据已经被清理掉了,结果如下:

    3c085e2bc55926ed4a23ac948fe542dd.png

    OK,那么群里的那位朋友的问题是,他只想删除固定的卡号的话该怎么办呢?

    这个就相当于附加的条件筛选了,我们直接在临时表的查询里附加条件:(注:红色加粗字体是附加条件)

    delete from a where id in (select id from (select id from a where cardno in (select cardno from a group by cardno having count(cardno)>1 and cardno=333)

    and id not in(select min(id) from a group by cardno having count(cardno)>1)) as tmpresult)

    这样儿就完成了Mysql删除重复数据的需求。

    展开全文
  • 数据库删除重复数据

    千次阅读 2021-03-03 10:46:21
    查找所有重复标题的记录: SELECT * FROM t_info a WHERE ((SELECT COUNT() FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC 一、查找重复记录 1、查找全部重复记录 Select * From 表 Where 重复...

    查找所有重复标题的记录:

    SELECT * FROM t_info a WHERE ((SELECT COUNT() FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC
    一、查找重复记录
    1、查找全部重复记录
    Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(
    )>1)
    2、过滤重复记录(只显示一条)
    Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title)
    注:此处显示ID最大一条记录
    二、删除重复记录
    1、删除全部重复记录(慎用)

    Delete 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count()>1)
    2、保留一条(这个应该是大多数人所需要的 _
    Delete HZT Where ID Not In (Select Max(ID) From HZT Group By Title)
    注:此处保留ID最大一条记录
    三、举例
    1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
    select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
    2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
    delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
    3、查找表中多余的重复记录(多个字段)
    select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(
    ) > 1)
    4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
    delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count() > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count()>1)
    5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
    select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count() > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count()>1)
    四、补充
    有两个以上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
    1、对于第一种重复,比较容易解决,使用

    select distinct * from tableName
    就可以得到无重复记录的结果集。
    如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
    select distinct * into #Tmp from tableName
    drop table tableName
    select * into tableName from #Tmp
    drop table #Tmp
    发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
    2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
    假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
    select identity(int,1,1) as autoID, * into #Tmp from tableName
    select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
    select * from #Tmp where autoID in(select autoID from #tmp2)
    ————————————————
    版权声明:本文为CSDN博主「冰河 『冰河技术』公号 作者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/l1028386804/article/details/51733585

    展开全文
  • 1、创建临时表 mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl GROUP BY (last_name, first_name,...2、在数据表中添加 INDEX(索引) 和 PRIMAY KEY(主键)这种简单的方法来删除表

    1、创建临时表

    mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl  GROUP BY (last_name, first_name, sex);
    mysql> DROP TABLE person_tbl;
    mysql> ALTER TABLE tmp RENAME TO person_tbl;

    2、在数据表中添加 INDEX(索引) 和 PRIMAY KEY(主键)这种简单的方法来删除表中的重复记录

    ALTER  IGNORE TABLE  person_tbl  ADD PRIMARY KEY (last_name, first_name);

    关键字:IGNORE ,加了可以强制删除重复数据,不加的话报错

    展开全文
  • 数据库去除重复数据

    千次阅读 2019-02-15 14:35:36
    背景:去除数据库中字段重复的数据 表t_bmk 包含三个字段 id...1、根据重复字段用group by函数进行分组,查出所有重复的数据,用max函数获取每组重复数据最大的id select fenzu_code,zhiwen_status,count(fenzu_cod...
  • 这里的重复数据数据库中每一列的值都相同的数据,有时候也许是没有主键的原因导致数据可能重复,或者是,除了主键,其他数据重复,那么下面的方法可以都这些重复数据进行删除,保留下重复数据中的一行就可以。...
  • 数据库去除重复记录

    万次阅读 多人点赞 2018-05-29 17:37:34
    所以跟大家分享下: 如何删除数据库重复的记录 一般情况下,数据库重复有以下那么三种方法: 第一种: 两条记录或者多条记录的每一个字段值完全相同,这种情况去重复最简单,用关键字distinct就可以去掉。...
  • 系统使用中,难免出现并发或者点击多次导致重复插入相同的数据(在没有乐观锁和验证逻辑的情况下),这时候如果数据量比较少的话可以手动修改,但是设计很多的数据量就不好手动修改了,接下来给大家一个sql语句实现...
  • mysql数据库如何去重复数据

    千次阅读 2021-02-02 11:44:48
    mysql数据库重复数据的方法:方法一:防止表中出现重复数据当表中未添加数据时,可以在MySQL数据表中设置指定的字段为PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据的唯一性。例如在学生信息表中学号no不...
  • 如何删除数据库SQL重复数据

    千次阅读 2022-01-17 17:08:20
    //我们经常遇到SQL Server数据重复的问题,和大家分享一下如何删除SQL Server重复数据,SQL Server重复数据有两个意义上的重复记录,一是 完全重复的记录,即所有字段均重复的记录,二是 部分关键字段重复的记录,...
  • 本文实例讲述了PHP查询并删除数据库多列重复数据的方法。分享给大家供大家参考,具体如下: <?php $con = mysql_connect("localhost","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); }...
  • mysql数据库如何去除重复数据

    千次阅读 2021-01-18 23:00:05
    mysql数据库去除重复数据的方法:1、查询需要删除的记录,会保留一条记录;2、删除重复记录,只保留一条记录,代码为【delete a from test1 a, (...)as bid from test1 c where..】。mysql数据库去除重复数据的方法...
  • MySQL 去除重复数据实例详解 有两个意义上的重复记录,一是完全重复的记录,也即所有字段均都重复,二是部分字段重复的记录。对于第一种重复,比较容易解决,只需在查询语句中使用distinct关键字去重,几乎所有...
  • 对于Oracle数据库一个表中的记录,如果有重复值如何进行删除。我现在将看了点Oracle数据库的东西,因为遇到了一些数据库的问题。对于Oracle数据库一个表中的记录,如果有重复值如何进行删除。我现在将的作法记录下来...
  • 在一些情况下,如要查询数据中的几个字段,此时有可能产生重复记录,而重复的记录是不符合规范的,数据表是现实世界的客观反映,因此,空值的产生是不可避免。  1、查询时不显示重复记录  在实现查询操作时,...
  • mysql数据库去除重复数据

    千次阅读 2018-01-24 22:31:30
    这里所说的重复数据是指那种多余的废数据,假如我要导入多份excel表格数据到数据库表里面,而Excel表里可能存在完全一样的记录,这个时候需要一个去重的操作, 在下面的sql语句里,数据表中homeid字段属性是唯一的...
  • 一般我们数据库重复数据有两种情况。 一:所以元素全部相同的情况。 对于这种情况,我们可以用下面的命令,解决。 select distinct * from student; 二:部分元素相同的情况。 现在假设我们需要删除name、age重复...
  • oracle数据库各种删除重复数据方法
  • mysql去除重复数据

    千次阅读 2022-04-19 16:25:29
    mysql去除重复数据 根据one列查询重复的数据(根据单列判断重复) SELECT * FROM tab_test WHERE ONE IN (SELECT ONE FROM testdelete GROUP BY ONE HAVING COUNT(ONE) > 1) 删除表中的重复记录:(根据单列删除且...
  • 今天小编就为大家分享一篇关于Android中的sqlite查询数据去掉重复值的方法实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 表结构: mysql> desc demo; +——-+——————+——+—–+———+—————-+ | Field | Type | Null | Key | Default | Extra | +——-+——————+——+—–+———+—————-+ | id | ...数据: mysql> se
  • 这将把所有的资料都抓出,无论资料值有无重复。在资料处理中,我们会经常碰到需要找出表格内的不同资料值的情况。换句话说,我们需要知道这个表格/栏位内有哪些不同的值,而每个值出现的次数并不重要。这要如何达成...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 145,528
精华内容 58,211
关键字:

数据库去除重复数据