暂无图片
MySQL序列号查询:在版本5.x里面和8.0.25里面结果不一样
我来答
分享
余俞
2021-10-15
MySQL序列号查询:在版本5.x里面和8.0.25里面结果不一样

查询语句:

  select * from (
select(@i1:= @i1 + 1) as sort_i, name,sex,age from user ,(select   @i1:= 0) t 
) t  where age > 30

5.x里面可以得到符合条件的序列号,但是在8.0.25里面得到的是 1、2、3、4、5…

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
chengang

不是 * 的问题。 是mysql 优化器改写了语句,让外层嵌套的 where age>30 自动放到了里面。优化器取消了嵌套。

可以explain 后 用 show warnings 看改写后的语句。

比如我测试的,优化器优化后就变成了

select `t`.`sort_i` AS `sort_i`,`t`.`act` AS `act`,`t`.`pagecount` AS `pagecount` from (/* select#2 */ select (@i1:=((@`i1`) + 1)) AS `sort_i`,`sys`.`test`.`act` AS `act`,`sys`.`test`.`pagecount` AS `pagecount` from `sys`.`test` where (`sys`.`test`.`pagecount` = 3)) `t`
暂无图片 评论
暂无图片 有用 2
暂无图片
余俞
升级问题到: 潜在风险
暂无图片 评论
暂无图片 有用 0
Uncopyrightable

好像记得mysql有对 select * 优化,不知道是否有影响;

暂无图片 评论
暂无图片 有用 1
余俞

原来是这样

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏