Mysql查询重复数据并按条件删除重复行
2016-09-02 14:28
411 查看
在对游戏进行合区的过程中, 存在一个情况,
那就是当一个账号在两个区都存在角色的时候, 需要按照条件对重复角色进行删除,
比如以等级为条件, 只保留等级高的.
首先, 第一条语句
第二条语句
第一条语句存入temp的user_id
并不一定就是max(level)所在行的user_id.
那么我用了另一种方式来解决, 三条命令:
那是因为mysql默认的设置要求,
group By后查询的列必须存在于group by后的字段集中,
修改设置即可, 在mysql命令行执行下面语句
那就是当一个账号在两个区都存在角色的时候, 需要按照条件对重复角色进行删除,
比如以等级为条件, 只保留等级高的.
解决方案
用mysql语句, 两条就可以解决:首先, 第一条语句
create temporary table temp as select user_id,max(level) as MAXID from user group by open_id; 这一句是将表user里面的数据按open_id进行分组, 然后查询每组里等级最大的行的user_id,level两个字段, 将查询结果存在一个临时表temp里面.
第二条语句
delete from user where user_id not in (select user_id from temp); 将user表里,没有存入temp表的user_id字段所在行删掉.
这部分内容添加于9.2日晚———————-begin
刚刚测试发现, 上面两条命令存在一定的问题, 原因很简单,第一条语句存入temp的user_id
并不一定就是max(level)所在行的user_id.
那么我用了另一种方式来解决, 三条命令:
1. create temporary table temp1 as select level, user_id, open_id from user order by level; 将user表的三项字段存入临时表temp1, 以level进行排序. 2. create temporary table temp2 as select user_id, level, open_id from temp1 group by open_id having count(open_id) > 1; 按open_id分组, 将分组后有重复数据的组的首个数据存入临时表temp2, 因为默认以level排序, 所以存入的是有重复项的低等级玩家id. delete from user where user_id in (select user_id from temp2); 删除啦!
————————————————end
报错
有的小伙伴在执行第一条命令时可能会报下面的错误ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'd1.user.user_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
那是因为mysql默认的设置要求,
group By后查询的列必须存在于group by后的字段集中,
修改设置即可, 在mysql命令行执行下面语句
set @@sql_mode=' STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION';
相关文章推荐
- Mysql 查询表中重复数据和删除表中重复的数据
- 关于MYSQL通过子查询删除重复数据的for update报错问题解决
- MySQL查询和删除重复数据
- mysql根据条件删除重复的数据保留一条
- mysql 查询及 删除表中重复数据
- MySql-如何查询删除数据表重复记录
- mysql在把子查询结果作为删除表中数据的条件,mysql不允许在子查询的同时删除原表数据
- mysql给列的属性赋值,修改列属性,删除记录,删除所有记录,查询表的记录,去除重复的,总和查询,条件查询,模糊查询,关联查询,范围查询
- MySql-如何查询删除数据表重复记录
- mysql 查询重复字段统计重复个数和删除重复字段的重复数据
- mysql查询表里的重复数据方法和删除重复数据
- 高性能可扩展mysql(执行计划,索引分析优化改写,删除重复数据,区间统计,满查询日志)
- MySQL重复记录 查询及删除
- mysql查询重复数据并计算每条重复数据count
- php利用数组函数,查询并删除数据库多列重复数据
- MYSQL 删除重复数据。。
- Silverlight 3 关于数据添加,删除,修改,条件查询的一点代码
- Oracle 分页查询 查询一个表中从某行到某行的数据; 删除 删除一张表中所有重复的行(只留重复行中的一行); 删除一张表中指定重复的行(只留重复行中的一行);
- MySQL删除重复数据
- 查询/删除数据库中重复数据