最近公司在给别的企业打了一个项目,在公司本地使用的是mysql 5.6,但是搭建的项目的mysql版本是最新版5.7以后吧,所以有些sql在执行上出了一点问题
目前发现的是:
1:
在5.6版本下先order by 再group by 会取order by之后的数据的第一条,但是在5.7版本下mysql会自动优化,忽略order by 条件,直接分组查询。
解决方案:在order by 后面加上limit 1000
例子:全部数据如下
在5.6版本情况下在这种情况分组可以发现是分组之后排序:
在mysql5.7版本情况下排序是被直接优化忽略掉的
解决方法加上红框中任意一句话,达到预期
2:
5.6版本下是可以更新或者插入表数据时使用子查询 插入或者更新的,但是在5.7版本下会出现 You can't specify target table 'kq_worker' for update in FROM clause 的错误,需要在把子查询的数据再select之后再插入