mysql 删除重复数据只保留一条记录

摘要:
分组操作前应用WHERE搜索条件;HAVING搜索条件在分组操作后应用。HAVING语法类似于WHERE语法,但HAVING可以包含聚合函数。HAVING子句可以引用选择列表中显示的任何项目。

删除重复数据保留name中id最小的记录

delete from order_info where id not in (select id from (select min(id) as id from order_info group by order_number) as b);

delete from table where id not in (select min(id) from table group by name having count(name)>1) and  id in (select id group by name having count(name)>1)

(注意:HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 和 SELECT 的交互方式类似。WHERE 搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中显示的任意项。)

扩展:

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,seq having count(*) > 1) and seq in (select 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) 

http://www.cnblogs.com/huangw/archive/2012/06/04/2534676.html

免责声明:文章转载自《mysql 删除重复数据只保留一条记录》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇利用Microsoft.Practices.Unity的拦截技术,实现.NET中的AOP13 制作模块压缩包、安装模块下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql 在update中实现子查询的方式

本文转自:91博客;原文地址:http://www.9191boke.com/644523640.html 当使用mysql条件更新时--最先让人想到的写法   UPDATE buyer SET is_seller=1 WHERE uid IN (SELECT uid FROM seller)  此语句是错误的,会报错 You can't specify...

青蛙学Linux—MySQL安装和初始化

1、安装MySQL 这里我们选择MySQL的源码包进行安装,MySQL版本5.7,安装路径为/usr/local/mysql,数据存储路径为/db/mysql,日志文件路径/usr/local/mysql/logs,运行MySQL的用户和组为mysql。 1.1、创建mysql用户 mysql用户用于运行MySQL,不能使用shell,为虚拟用户: [ro...

windows下如何查看和修改MySQL的端口号

以win7系统,MySQL版本5.5.57为例: 查看本机mysql的端口号(默认是3306) 打开DOS窗口   win+R打开运行界面输入cmd 或者 在开始菜单的搜索框输入cmd 然后回车 2.连接mysql服务   输入mysql -u root - p 然后回车 3.继续输入密码,然后回车: 4.出现以下界面说明连接mysql服务成功 5....

MySQL慢查询(二)

一、简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析。可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的...

docker 配置 mysql

docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7.30 ## 一个是数据文件夹,一个是配置文件夹 ## mysql 容器中 my.cnf incloud 了 conf.d 文件夹下所有的 cnf 配置文件,所以这里我们只要将 conf.d...

mysql explain中key_len的计算

ken_len表示索引使用的字节数,根据这个值,就可以判断索引使用情况,特别是在组合索引的时候,判断是否所有的索引字段都被查询用到。 key_len显示了条件检索子句需要的索引长度,但 ORDER BY、GROUP BY 子句用到的索引则不计入 key_len 统计值; 关于 key_len 的计算规则: • 当索引字段为定长数据类型,比如:char,in...