mysql重复数据只取一条数据_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

select

*

from r_people_report_bak ppp where 1=1

and length(ppp.reporting_period)<=6

and ppp.organization_code || '_' ||

to_char(to_date(ppp.reporting_period ,'YYYY-mm'),'yyyy') || '-' || to_char(to_date(ppp.reporting_period ,'YYYY-mm'),'mm')

|| '_' || ppp.datilor_all

in (

select pp.organization_code || '_' || pp.aa || '_' || pp.datilor_all from (

select p.people_id,p.organization_code,p.datilor_all,

to_char(to_date(p.reporting_period ,'YYYY-mm'),'yyyy') || '-' || to_char(to_date(p.reporting_period ,'YYYY-mm'),'mm') aa

from r_people_report_bak p

where p.reporting_period is not null ) pp

group by pp.aa ,pp.organization_code,pp.datilor_all

having count(1) > 1 )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下 SQL 语句删除重复数据保留一条: ``` DELETE t1 FROM 表名 t1, 表名 t2 WHERE t1.id > t2.id AND t1.字段名 = t2.字段名; ``` 其中,`表名` 为需要删除重复数据的表名,`字段名` 为用于判断重复的字段名,`id` 为表中的主键或唯一标识符。该 SQL 语句会将所有重复数据保留一条,删除其余重复数据。 ### 回答2: 要删除重复数据保留一条,可以使用MySQL的DELETE语句和子查询来实现。 首先,可以使用如下的SELECT语句来查询所有重复数据: SELECT col1, col2, ..., coln, COUNT(*) AS count FROM table_name GROUP BY col1, col2, ..., coln HAVING COUNT(*) > 1; 这个查询用于到所有有重复数据的列,并通过GROUP BY和HAVING子句筛选重复数据。 接下来,可以使用DELETE语句和子查询来删除重复数据,只保留一条: DELETE FROM table_name WHERE (col1, col2, ..., coln) NOT IN (SELECT col1, col2, ..., coln FROM table_name GROUP BY col1, col2, ..., coln HAVING COUNT(*) > 1); 这个DELETE语句会删除表中除了第一次现的重复数据以外的所有重复数据。 注意,在使用这个方法之前,一定要先备份好数据,以免误删数据。 ### 回答3: 要删除MySQL中的重复数据保留一条,可以使用以下的步骤: 1. 首先,我们需要重复数据。可以使用GROUP BY和HAVING语句来重复数据。例如,假设我们要删除表中的重复email字段,可以使用以下语句: SELECT email, COUNT(*) FROM table_name GROUP BY email HAVING COUNT(*) > 1; 这将返回所有重复的email及其重复的次数。 2. 根据到的重复数据,我们可以选择保留其中的一条,并删除其他重复数据。可以使用DELETE语句来删除重复数据。例如,假设我们要保留COUNT(*)最大的那条数据,可以使用以下语句: DELETE FROM table_name WHERE email IN (SELECT email FROM table_name GROUP BY email HAVING COUNT(*) > 1) AND id NOT IN (SELECT MAX(id) FROM table_name GROUP BY email HAVING COUNT(*) > 1); 这将删除除了COUNT(*)最大的那条数据以外的其他重复数据。 3. 最后,我们可以再次运行第一步的查询语句来验证是否已成功删除重复数据。如果查询结果为空,说明已成功删除重复数据保留一条。 需要注意的是,执行此操作前请务必备份数据库,以防意外数据损失。另外,根据实际情况,可能需要针对具体的表和字段进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值