一个看不懂的SQL语句

杨四正的源码剖析课
博客专家认证
2014-10-09 01:14:45

这个语句看不懂,求解释...
EXPLAIN的结果是:
...全文
413 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2014-11-03
  • 打赏
  • 举报
回复
奇葩语句,重写吧。 奇淫技巧尽量少学,别误入歧途了。 呵呵,开个玩笑
gaofei8704 2014-10-10
  • 打赏
  • 举报
回复
LZ提供的语句主要有以下拐点: 1、SET @ 2、WHERE @ 3、LEAST(@) 此段sql一点不复杂,主要体现的是mysql变量的生命周期和sql的执行顺序: 1、SET 声明的变量,只对当前连接有效 2、where 和order 的执行先后顺序是先where 后 order 3、least函数在这里没有实质用途,只是用了给变量赋值 所以,此段sql后台的计算逻辑为: 1、获取变量,=0 2、query表 ,取出第一条 3、过滤变量<=1,通过 4、通过least里面的:=赋值,变量变为1 5、query表,取出第二条,过滤 ,变量<=1,通过 6、set变量=2 7,where过滤不通过,执行结束
  • 打赏
  • 举报
回复
引用 7 楼 wwwwb 的回复:
在ORDER BY中改变变量的值,在WHERE中使用变量的值 应该是MYSQL的特殊功能吧,一般顺序是WHERE->order by,具体原因要看看MYSQL的源码了
让我想起一句话:这是天才们的事,不是我等凡夫俗子可以理解的。洗洗睡了,不纠结了...
wwwwb 2014-10-09
  • 打赏
  • 举报
回复
在ORDER BY中改变变量的值,在WHERE中使用变量的值 应该是MYSQL的特殊功能吧,一般顺序是WHERE->order by,具体原因要看看MYSQL的源码了
  • 打赏
  • 举报
回复
引用 5 楼 wwwwb 的回复:
在高性能MYSQL中有解释,变量累计后再执行<=1

能再详细点吗?SQL的执行顺序不是where->order by吗?是不是我理解的有问题?
《高性能MySQL》中的解释是:
wwwwb 2014-10-09
  • 打赏
  • 举报
回复
在高性能MYSQL中有解释,变量累计后再执行<=1
  • 打赏
  • 举报
回复
引用 2 楼 ACMAIN_CHM 的回复:
建议你先自己试着解释一下这个存储过程,否则别人也根本不知道你目前已经懂了什么,到什么层次,到底是哪儿不懂。 写出你自己的理解,然后让别人来看你的理解是否正确。 否则别人解释过简单你还是理解不了,解释得过细,可能又是根本不必要。
谢谢指教,已经解释了,在3楼...
  • 打赏
  • 举报
回复
引用 1 楼 wwwwb 的回复:
什么地方不懂? LEAST语句中@rownum累加
我理解中的执行顺序是where->order by. 按照我的理解,先执行了where语句,将符合条件的都查出来,此时@rownum一直为0,得到全表的数据;然后使用order by再对查出来的数据进行排序...这样的话,得到的应该是排好序的全表数据,这里得到的却只有两条数据... 所以不太懂...
ACMAIN_CHM 2014-10-09
  • 打赏
  • 举报
回复
建议你先自己试着解释一下这个存储过程,否则别人也根本不知道你目前已经懂了什么,到什么层次,到底是哪儿不懂。 写出你自己的理解,然后让别人来看你的理解是否正确。 否则别人解释过简单你还是理解不了,解释得过细,可能又是根本不必要。
wwwwb 2014-10-09
  • 打赏
  • 举报
回复
什么地方不懂? LEAST语句中@rownum累加

56,875

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧