失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > MySQL中删除完全重复数据的准确SQL语句

MySQL中删除完全重复数据的准确SQL语句

时间:2021-05-11 07:37:43

相关推荐

MySQL中删除完全重复数据的准确SQL语句

数据库|mysql教程

mysql,MySQL中删除完全重复数据的准确SQL语句,数

数据库-mysql教程

微信分享朋友圈源码,vscode mac f5,ubuntu更改文件,tomcat配置jvm变量,入门爬虫技术,php 验证是否登录,鄂州百度seo教程,婚恋网站程序模板,电影视频网站模板带后台lzw

这种写法在sqlserver或者oracle中是支持的,但是mysql目前是不支持的,会报类似错:You can

虚拟币众筹源码,安装多个vscode,ubuntu退出所有程序,tomcat安全测试,iOS sqlite死锁,wordpress 菜单 插件,学前端开发框架费用,影刀爬虫,邮箱 php,seo艺术 pdf,全套网站模板,电子商务网页设计模板,深蓝后台登录模板,如何用微擎创建微页面,美萍商业进销存管理系统完美破解版,微信小程序 天上人间lzw

蜘蛛池网站源码,vscode代码缩进调整,ubuntu 驱动编译,tomcat开发环境搭建,sqlite3什么时候加锁,爬虫超市,php 转浮点型,南平企业seo是什么,志愿者网站源码带手机,网页居中模板lzw

案例:

——————————————————————————————————

按常理来说,这个sql语句应该是:

这种写法在sqlserver或者Oracle中是支持的,,但是mysql目前是不支持的,会报类似错:You can’t specify target table ‘tablename’ for update ,这是因为在mysql中不能同时查询一个表的数据再同时进行删除.

目前网上流行的一种解法是:

1)创建一个临时表,讲要查询的列的存入临时表中

create table temp as select …

2)在temp表和原始表中进行操作

delete from tablename

3)drop temp…

但是这种做法,不仅浪费空间资源,同时也缺乏友好性。通过观察我们发现这类查询要解决的是如何将子查询中的表与主查询中的表区分开来,因此我们可以考虑用别名的方法,将子查询的结果放到一个别名中。

完整的sql语句如下:

DELETE FROM tablename where id not in (select bid from (select min(id) as bid from tablename group by name,kecheng,fenshu) as b ) ;

解释:

select bid from (select min(id) as bid from tablename group by name,kecheng,fenshu) as b

这个子查询的目的是从b中列出讲筛选结果,即bid的集合。

(select min(id) as bid from tablename group by name,kecheng,fenshu) as b

将分组结果中的最小的bid当做一个心的集合当做一个心的子表b,

注意mid(id)一定要有一个别名,这里取的是bid,作为b的一个列名,因为在上一级查询中要用到这个列名(红色标注)。

如果觉得《MySQL中删除完全重复数据的准确SQL语句》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。