一个看不懂的SQL语句 本帖最后由 xxxlxy2008 于 2014-10-09 13:15:36 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 什么地方不懂?LEAST语句中@rownum累加 我理解中的执行顺序是where->order by.按照我的理解,先执行了where语句,将符合条件的都查出来,此时@rownum一直为0,得到全表的数据;然后使用order by再对查出来的数据进行排序...这样的话,得到的应该是排好序的全表数据,这里得到的却只有两条数据...所以不太懂... 在高性能MYSQL中有解释,变量累计后再执行<=1 能再详细点吗?SQL的执行顺序不是where->order by吗?是不是我理解的有问题?《高性能MySQL》中的解释是: 在ORDER BY中改变变量的值,在WHERE中使用变量的值应该是MYSQL的特殊功能吧,一般顺序是WHERE->order by,具体原因要看看MYSQL的源码了 LZ提供的语句主要有以下拐点:1、SET @2、WHERE @3、LEAST(@)此段sql一点不复杂,主要体现的是mysql变量的生命周期和sql的执行顺序:1、SET 声明的变量,只对当前连接有效2、where 和order 的执行先后顺序是先where 后 order3、least函数在这里没有实质用途,只是用了给变量赋值所以,此段sql后台的计算逻辑为:1、获取变量,=02、query表 ,取出第一条3、过滤变量<=1,通过4、通过least里面的:=赋值,变量变为15、query表,取出第二条,过滤 ,变量<=1,通过6、set变量=27,where过滤不通过,执行结束 vc调用MySql存储过程,则存储过程中不能有select语句吗? 一个服务器多个验证程序同时运行的问题(每个程序连接不同的数据库) 备份了之后恢复 突然发现这个库不是最新的 表结构和字段 插入数据成功,但是数据库中显示为空(初学者提问)。 怎么获取重复项的最后一条记录 如何学数据库? 关于正则表达式的几个小问题。内有代码 注释掉的部分输出结果和没有注释的一样。(在线等,解决完再睡觉) orderby 索引优化 mysql数据合并方案 请教一个关于deadlock 死锁的问题 [求助]mysql存储过程操作 请格纹看看,数据库错误日志
LEAST语句中@rownum累加
我理解中的执行顺序是where->order by.
按照我的理解,先执行了where语句,将符合条件的都查出来,此时@rownum一直为0,得到全表的数据;然后使用order by再对查出来的数据进行排序...这样的话,得到的应该是排好序的全表数据,这里得到的却只有两条数据...
所以不太懂...
《高性能MySQL》中的解释是:
应该是MYSQL的特殊功能吧,一般顺序是WHERE->order by,具体原因要看看MYSQL的源码了
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过滤不通过,执行结束