sql 去掉重复的数据

news/2025/1/15 18:05:59/

数据库中不小心导入了很多重复的数据,想要只保留重复数据中的一条数据,其他的全部删掉:

谨慎起见,按照如下步骤基本不会出问题:

1.查询你导入的所有数据:

我是通过用户ID和操作人的ID,筛选了我导入的所有数据

共255条

select  * 
from security_role_user 
where user_id = '114741' 
and operate_user = '13052'

 2.删除重复后需要保留数据的总数:

共87条

select distinct security_role_code 
from security_role_user 
where user_id = '114741' 
and operate_user = '13052' 

根据以上两条我们可以看出,我们需要删除168条数据

3.查询 包含重复数据的 security_role_code 项

select  security_role_code 
FROM security_role_user 
where user_id = '114741' 
and operate_user = '13052' 
GROUP BY security_role_code HAVING COUNT(security_role_code)>1 

4.我们需要保留的是有重复数据中,id较小的那些条目

将这些ID查出来:

SELECT MIN(id) 
FROM security_role_user 
where user_id = '114741' 
and operate_user = '13052' 
GROUP BY security_role_code HAVING COUNT(security_role_code)>1 )

最后,我们综合一下,我们需要查出  security_role_code 在重复项中,并且ID不在我们想要保留的项中,查询的sql是:

5.查询需要删除条目的ID

总数为168

select * 
from security_role_user 
where user_id = '114741' 
and operate_user = '13052' 
and  security_role_code  in (select  security_role_code FROM security_role_user where user_id = '114741' and operate_user = '13052' GROUP BY security_role_code HAVING COUNT(security_role_code)>1 )
and id not in (SELECT MIN(id) ids FROM security_role_user where user_id = '114741' and operate_user = '13052' GROUP BY security_role_code HAVING COUNT(security_role_code)>1 )

6.在5的基础上,我们根据ID删掉这些项,那么最终的sql就是:

delete 
from security_role_user  
where id in (select id from security_role_user where user_id = '114741' and operate_user = '13052' and  security_role_code  in (select  security_role_code FROM security_role_user where user_id = '114741' and operate_user = '13052' GROUP BY security_role_code HAVING COUNT(security_role_code)>1 )and id not in (SELECT MIN(id) ids FROM security_role_user where user_id = '114741' and operate_user = '13052' GROUP BY security_role_code HAVING COUNT(security_role_code)>1 )
)


http://www.ppmy.cn/news/734779.html

相关文章

SQL查询重复语句,删除重复数据

原创地址https://www.cnblogs.com/lanliying/p/5695349.html(不知道原创在哪 我是在他这里找的) 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId&…

SQL删除重复数据并只保留一条

1、首先我们来看下数据 这里我们可以看到数据共有五条,但实际数据只有两条,需要删除三条重复的。 2、接下来找出重复的数据 提示:只需把 字段替换即可 select * from "epc_geely_catalog_fourthly" a where (a.carid,a.code) in (select…

Sql: 查询重复数据和删除重复数据

1. 单列 select * from test where name in (select name from test group by name having count (name) > 1 select * from [部门信息汇总] where 有效否 1 and [部门名称] in (select [部门名称] from [部门信息汇总] where 有效否1 group by [部门名称] having count (…

SQL SERVER 查询、删除重复数据

查询删除重复数据,只保留一条记录: 1.根据单字段,查询表中该字段重复出现记录: SELECT * FROM Table WHERE Parameter IN (SELECT Parameter FROM Table GROUP BY Parameter HAVING COUNT(Parameter ) > 1) 分析&#xff1a…

SQL中重复数据的查询与删除

第一篇 在一张表中某个字段下面有重复记录,有很多方法,但是有一个方法,是比较高效的,如下语句: select data_guid from adam_entity_datas a where a.rowid > (select min(b.rowid) from adam_entity_datas b where…

sqlserver 删除表中重复的数据

--在删除之前可以先查看一下结果: SELECT max(主键ID),列1,列2...列n FROM [TABLE表] group by 列1,列2...列n--删除重复的数据,保留主键最大的那条数据(如果需要保留主键最小的数据,则是:min(主键ID) ...) delete from [TABLE表] where [主键ID] NOT IN (SELECT max(主键ID) F…

sql删除表中各类重复数据

在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1、查找表中多余的重复记录,重复记录是根据单个字段(code)来判断 select * from MLTY_MDM_PRODUCT where code in (select code from MLTY_MDM_PRODUCT group by code ha…

如何删除sql server中的重复数据

如何删除sql server中的重复数据 先来看下有多少重复数据,伪代码如下: select count(重复字段)-count(distinct 重复字段) from 表名执行这个SQL伪代码候就能看到有多少数据是重复的,以便后面查看是否全部删除 然后通过如下SQL伪代码对重复…