精华内容
下载资源
问答
  • Oracle查询重复数据删除,只保留一条记录.docx
  • 根据autoID删除临时表#tmp中的重复数据,只保留每组重复数据中的第一条
  • go — 张三100 与 王五80 是有重复的 INSERT INTO test_delete SELECT ‘张三’, 100 UNION ALL SELECT ‘张三’, 100 UNION ALL SELECT ‘李四’, 80 UNION ALL SELECT ‘王五’, 80 UNION ALL SELECT ‘王五’, ...
  • 主要介绍了mysql查找删除重复数据并只保留一条实例详解的相关资料,需要的朋友可以参考下
  • mongodb删除重复数据保留一条

    千次阅读 2020-09-24 11:18:48
    标红字段可能存在重复数据,需删除重复数据保留一条 2. 聚合操作 db.defect_product_data.aggregate([ { $group: { _id: {barcode: '$barcode', device_code: '$device_code', produce_process: '$produce_...

    1.问题引入

    标红字段可能存在重复数据,需删除重复数据保留一条
    在这里插入图片描述

    2. 聚合操作

    db.defect_product_data.aggregate([
        {
            $group: { _id: {barcode: '$barcode', device_code: '$device_code', produce_process: '$produce_process', produce_user: '$produce_user',produce_shift: '$produce_shift'}, count: {$sum: 1},dups: {$addToSet: '$_id'}}
        },
        {
            $match: {count: {$gt: 1}}
        }
    ],
    {allowDiskUse: true}
    ).forEach(function(doc){
        doc.dups.shift();
        db.defect_product_data.remove({_id: {$in: doc.dups}});
    })
    
    

    3.语句解析

    • 1.根据可能重复的字段分组并统计数量, g r o u p 只 会 返 回 参 与 分 组 的 字 段 , 使 用 group只会返回参与分组的字段,使用 group使addToSet在返回结果数组中增加_id字段
    • 2.使用$match匹配数量大于1的数据
    • 3 allowDiskUse: true管道阶段的内存(RAM)限制为100 MiB(100 * 1024 * 1024字节)。如果一个阶段超出此限制,则MongoDB将产生错误。要允许处理大型数据集,可以在方法中设置 aggregate()方法的选项allowDiskUse。该allowDiskUse选项允许大部分的聚合管道操作将数据写入到一个临时文件。
    • 4.doc.dups.shift();表示从数组第一个值开始删除;作用是踢除重复数据其中一个_id,让后面的删除语句不会删除所有数据
    • 5.使用forEach循环根据_id删除数据

    $addToSet 操作符只有在值没有存在于数组中时才会向数组中添加一个值。如果值已经存在于数组中,$addToSet返回,不会修改数组。

    注意:forEach$addToSet的驼峰写法不能全部写成小写,因为***mongodb严格区分大小写、mongodb严格区分大小写、mongodb严格区分大小写***,说三遍!

    展开全文
  • mysql数据库删除重复数据保留一条

    万次阅读 多人点赞 2019-07-09 22:15:13
    现在身份证号identity_id和姓名name有很多重复数据,需要删除保留一条有效数据。 2.模拟环境 1.等入mysql数据库,创建一个单独的测试数据库mysql_exercise create database mysql_exercise charset utf8; 2....

    1.问题引入

    假设一个场景,一张用户表,包含3个字段。id,identity_id,name。现在身份证号identity_id和姓名name有很多重复的数据,需要删除只保留一条有效数据。

    2.模拟环境

    • 1.登入mysql数据库,创建一个单独的测试数据库mysql_exercise
    create database mysql_exercise charset utf8;
    
    • 2.创建用户表users
    create table users(
    					id int auto_increment primary key,
    					identity_id varchar(20),
    					name varchar(20) not null
                       );
    

    在这里插入图片描述

    • 3.插入测试数据
    insert into users values(0,'620616199409206512','张三'),
    						(0,'620616199409206512','张三'),
    						(0,'62062619930920651X','李四'),
    						(0,'62062619930920651X','李四'),
    						(0,'620622199101206211','王五'),
    						(0,'620622199101206211','王五'),
    						(0,'322235199909116233','赵六');
    

    可以多执行几次,生成较多重复数据。
    在这里插入图片描述

    • 4.解决思路
      (1)根据身份证号和name进行分组;
      (2)取出分组后的最大id(或最小id);
      (3)删除除最大(或最小)id以外的其他字段;

    • 5.第一次尝试(失败!!!)

    delete from users where id not in (select max(id) from users group by identity_id,name);
    

    报错:

    1093 (HY000): You can't specify target table 'users' for update in FROM clause
    

    在这里插入图片描述
    因为在MYSQL里,不能先select一个表的记录,再按此条件进行更新和删除同一个表的记录。
    解决办法是,将select得到的结果,再通过中间表select一遍,这样就规避了错误,
    这个问题只出现于mysql,mssql和oracle不会出现此问题。

    所以我们可以先将括号里面的sql语句先拿出来,先查到最大(或最小)id。

    select max_id from (select max(id) as max_id from users group by identity_id,name);
    

    接着,又报错了!!!

    ERROR 1248 (42000): Every derived table must have its own alias
    

    意思是说:提示说每一个衍生出来的表,必须要有自己的别名!

    执行子查询的时候,外层查询会将内层的查询当做一张表来处理,所以我们需要给内层的查询加上别名
    在这里插入图片描述
    继续更正:
    给查询到的最大(或最小id)结果当做一张新的表,起别名t,并查询t.mix_id

    select t.max_id from (select max(id) as max_id from users group by identity_id,name) as t;
    

    可以成功查到最大(或最小)id了,如下图:
    在这里插入图片描述

    • 6.第二次尝试(成功!!!)
    delete from users where id not in (
    		select t.max_id from 
    		(select max(id) as max_id from users group by identity_id,name) as t
    		);
    

    执行结果:
    在这里插入图片描述
    成功将重复的数据删除,只保留了最后一次增加的记录。同理也可以保留第一次添加的记录(即删除每个分组里面除最小id以外的其他条记录)

    3.知识拓展一:更新数据

    其他场景应用:要将用户表user_info里名字(name)为空字符串("")的用户的状态(status)改成"0"

    update user_info set status='0' where user_id in (select user_id from user_info where name='')
    

    同样报了如下错误:

    You can’t specify target table ‘user_info’ for update in FROM clause

    因为在MYSQL里,不能先select一个表的记录,再按此条件进行更新和删除同一个表的记录,解决办法是,将select得到的结果,再通过中间表select一遍,这样就规避了错误。
    以下两种均可!!!

    update user_info set status='0' where user_id in 
    	 (select user_id from (select user_id from user_info where name = '') t1);
    

    下面这种也可,细微差别,别名可带as可不带,t1.user_id 直接和内层的user_id对应也可以。

    update user_info set status='0' where user_id in 
    	(select t1.user_id from (select user_id from user_info where name='') as t1);
    

    3.1 分步骤解析

    (1)将以下查询结果作为中间表:

    select user_id from user_info where name='';
    

    (2)再查询一遍中间表作为结果集:

    select user_id from (select user_id from user_info where name='') as t;
    

    (3)更新数据

    update user_info set status='0' where user_id in 
    	(select user_id from (select user_id from user_info where name='') as t1);
    

    4.拓展练习:删除重复数据

    编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。

    +----+------------------+
    | Id | Email            |
    +----+------------------+
    | 1  | john@example.com |
    | 2  | bob@example.com  |
    | 3  | john@example.com |
    +----+------------------+
    

    Id 是这个表的主键。
    例如,在运行你的查询语句之后,上面的 Person 表应返回以下几行:

    +----+------------------+
    | Id | Email            |
    +----+------------------+
    | 1  | john@example.com |
    | 2  | bob@example.com  |
    +----+------------------+
    
    
    • 解答一:
    delete from Person where Id not in (
    	select t.min_id from (
    		select min(Id) as min_id from Person group by Email
    		) as t
    	);
    
    • 解答二:
    delete p1 from 
    	Person as p1,Person as p2 
    		where p1.Email=p2.Email and p1.Id > p2.Id;
    
    展开全文
  • SQL删除重复数据保留一条

    千次阅读 2020-11-01 00:57:39
    SQL删除重复数据保留一条 用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select *...

    SQL删除重复数据只保留一条
    用SQL语句,删除掉重复项只保留一条
    在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢
    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 peopleName in (select peopleName from people group by peopleName having count(peopleName) > 1)
    and peopleId not in (select min(peopleId) from people group by peopleName having count(peopleName)>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)

    6.消除一个字段的左边的第一位:

    update tableName set [Title]=Right([Title],(len([Title])-1)) where Title like ‘村%’

    7.消除一个字段的右边的第一位:

    update tableName set [Title]=left([Title],(len([Title])-1)) where Title like ‘%村’

    8.假删除表中多余的重复记录(多个字段),不包含rowid最小的记录
    update vitae set ispass=-1
    where peopleId in (select peopleId from vitae group by peopleId

    展开全文
  • oracle删除重复数据保留一条记录

    千次阅读 2020-03-02 09:54:57
    1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 ...2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录 DELETE from 表 WHERE (id) IN (...

    1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断

    select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1)

    2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录

    DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM 表 GROUP BY id HAVING COUNT(*) > 1);

     

     

    3、查找表中多余的重复记录(多个字段)

    select * from 表 a where (a.Id,a.seq) in(select Id,seq from 表 group by Id,seq having count(*) > 1)
    
    

     

     

    4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录

     

    delete from 表 a where (a.Id,a.seq) in (select Id,seq from 表 group by Id,seq having count(*) > 1) and rowid not in (select min(rowid) from 表 group by Id,seq having count(*)>1)
    
    

     

     

    5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

    select * from 表 a where (a.Id,a.seq) in (select Id,seq from 表 group by Id,seq having count(*) > 1) and rowid not in (select min(rowid) from 表 group by Id,seq having count(*)>1)

     

     

    展开全文
  • 首先找到哪些数据是有重复记录的 over里是条件 select t.*,row_number() over(partition by t.ordercode,t.mobile...根据条件拿到有重复数据的数据 su是重复次数 select tt.*from ( select t.*,row_number() over(parti
  • 文章目录stata清洗数据——去除重复数据方法stata中的_N和_n(是去重操作的基础)去重操作对单一列:id对两列(及以上):date 和 证券代码 stata清洗数据——去除重复数据方法 stata中的_N和_n(是去重操作的基础)...
  • 写这篇文章的目的, 是为了解决什么问题,用于问题描述 、XXX的基本概念 term 索引词,在elasticsearch中索引词(term)是个能够被...删除文本 补充内容/纠正内容 [修改时间: 2019-06-20] 历史文章中的引用地址, ...
  • 查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1) 2、删除表中多余的...
  • 这里我们可以看到数据共有五,但实际数据只有两,需要删除三条重复的。 2、接下来找出重复数据 提示:只需把 字段替换即可 select * from "epc_geely_catalog_fourthly" a where (a.carid,a.code) in (select ...
  • 在日常开发中遇到的问题,历史数据中存在重复数据需要删除,但是仍需要保留一条。 处理 DELETE FROM 表名 WHERE (字段1,字段2) IN (SELECT 字段1,字段2 FROM (SELECT 字段1,字段2 FROM 表名 GROUP BY 字段1,字段...
  • 主要介绍了JS数组去掉重复数据保留一条的实现代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
  • 查重是我们在工作中经常会遇到的一个需求,下面这篇文章主要给大家介绍了关于MySQL查询重复数据(删除重复数据保留id最小的一条为唯一数据)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有...
  • 删除部分字段有重复数据保留其中一条记录数据 2,效果图: 处理前: 处理后: 3,SQL delete FROM Atable WHERE EXISTS ( SELECT id FROM( SELECT name, code FROM Atable GROUP BY name, code HAVING COUNT...
  • 无自增主键,去除重复保留一条,步骤: 1、导出a表结构,命名为b表 b表结构为: name mobile 2、查询a表去重复语句,再插入b表 insert into b (select distinct * from a); 执行语句,b表内容为: name ...
  • 用SQL语句,删除重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除重复的呢?
  • 已知个存储整数的顺序表La,试构造顺序表Lb,要求顺序表Lb中只包含顺序表La中所有值不相同的数据元素。 算法思路: 先把顺序表La的第个元素付给顺序表Lb,然后从顺序表La的第2个元素起,每个元素与顺序表Lb中...
  • 重复数据根据单个字段进行判断 1、首先,查询表中多余的数据,由关键字段(name)来查询。 select * from OA_ADDRESS_BOOK where name in (select name from OA_ADDRESS_BOOK group by name having count...
  • **#例1:根据手机号customer_id查询所有重复数据** SELECT * FROM aad_apply_main WHERE customer_id IN ( SELECT customer_id FROM aad_apply_main GROUP BY ...
  • MySQL根据多个字段删除重复数据(保留一条) 在成千上万条数据中,存在着一些相同的记录,该如何用SQL语句来删除掉重复的呢 话不多说直接上代码 DELETE FROM 表名 WHERE S_ID IN ( SELECT S_ID FROM 表名 A, ...
  • 本来打算用一条sql直接执行,但是数据量太大,所以正好拿存储过程练练。感谢我的同事对我的帮助。 要求:删除相同order_id的其他多余数据。id是主键 思路:对数据根据order_id排序,这样相同数据就会紧挨着,然后...
  • 本篇文章是对Oracle删除重复数据只留一条的解决方法进行了详细的分析介绍,需要的朋友参考下
  • Sql server 数据库查询重复的数据和删除重复数据保留一条数据 演示内容数据 数据库表 create table register( Id int primary key identity, [UserName] nvarchar(255), MobilePhone nvarchar(255), ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 265,618
精华内容 106,247
关键字:

删除重复数据保留一条