遇到一个简单的sql问题,让从一张表里删除重复数据,一时竟然没写出来,现在总结如下:
有A表,结构为ID,NAME,有六个数据如图:
删除表中重复的数据只留a,b,c三个值
注意:不是简单的去重,所以用distinct不行。
我写的语句是
但是执行报错,错误如下:
这个错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中),这一点感觉mysql也太不强大了,个人感觉这样逻辑上没啥问题啊,不知道mysql为何不能执行。
只好把查询的结果表重命名一下。改为:
结果是执行成功了,但是报了一个错如下:
这个错误意思是:sql中select后面的字段必须出现在group by后面,或者被聚合函数包裹,不然会抛出上面的错误 ,真是好扯淡啊,意思是你查出这个值就必须按这个值进行分组,这应该是sql_mode设置的问题,果断改下sql_mode,去掉only_full_group_by
可以修改
vim /etc/mysql/my.cnf 配置
也可以直接SQL改
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
-- 查看SQL_MODE SELECT @@sql_mode;
然后就ok了,sql语句可以改的更精简点: