首页 新闻 会员 周边 捐助

讨论下变量在sql语句的作用域,附实例如下,本人有点想不通,应该跟sql执行顺序也有点关系吧

0
悬赏园豆:50 [待解决问题]

下面的变量每次不是应该从0开始计算吗,但是从结果来看,只有select读第一条记录时 读了 r表,其后都是根据上次结果自加的,没有在读取r表,有兴趣的朋友帮忙解释下

 

mysql> select * from dateTable_tmp limit 10;
+------------+-----+
| riqi       | num |
+------------+-----+
| 2017-09-26 |   0 |
| 2017-09-25 |   0 |
| 2017-09-24 |   0 |
| 2017-09-23 |   0 |
| 2017-09-22 |   0 |
| 2017-09-21 |   0 |
| 2017-09-20 |   0 |
| 2017-09-19 |   0 |
| 2017-09-18 |   0 |
| 2017-09-17 |   0 |
+------------+-----+
10 rows in set

mysql> select riqi,@num:=@num+1 FROM
     dateTable_tmp a ,(select @num:=0) r limit 10;
+------------+--------------+
| riqi       | @num:=@num+1 |
+------------+--------------+
| 2017-09-26 |            1 |
| 2017-09-25 |            2 |
| 2017-09-24 |            3 |
| 2017-09-23 |            4 |
| 2017-09-22 |            5 |
| 2017-09-21 |            6 |
| 2017-09-20 |            7 |
| 2017-09-19 |            8 |
| 2017-09-18 |            9 |
| 2017-09-17 |           10 |
+------------+--------------+
10 rows in set

mysql> 
葱油饼的主页 葱油饼 | 初学一级 | 园豆:186
提问于:2015-01-23 11:11
< >
分享
所有回答(3)
0

你想说啥呢?

想说应该是从0~9是吗?

爱编程的大叔 | 园豆:30844 (高人七级) | 2015-01-23 11:14

我的意思 应该都是 1

支持(0) 反对(0) 葱油饼 | 园豆:186 (初学一级) | 2015-01-23 11:45

@葱油饼: 计算语句都是逐行执行的,所以SQL有一个建议,尽量避免CASE WHENz这一类的语法(会拖慢速度)

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2015-01-23 11:58

@爱编程的大叔: dateTable_tmp a ,(select @num:=0) r 这两张表都只读了一次吗

支持(0) 反对(0) 葱油饼 | 园豆:186 (初学一级) | 2015-01-23 12:15

我是没搞懂,这条语句是如何,检索数据的,说的深点就是mysql查询时的机制

支持(0) 反对(0) 葱油饼 | 园豆:186 (初学一级) | 2015-01-23 12:18

@葱油饼: 你是打算写数据库引擎吧?

失敬失敬。

这个我也只会用,百年内没有打算开发数据库引擎,所以也不懂。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2015-01-23 13:20

@爱编程的大叔: 大叔 这。。。。,失礼了我

支持(0) 反对(0) 葱油饼 | 园豆:186 (初学一级) | 2015-01-23 13:47
0

select不是只执行一次么~

幻天芒 | 园豆:37207 (高人七级) | 2015-01-23 11:30

额。。。,或者我想问 这条语句的执行 步奏

支持(0) 反对(0) 葱油饼 | 园豆:186 (初学一级) | 2015-01-23 11:49
0

下一条记录的num是上一条记录的num+1?

leerh | 园豆:207 (菜鸟二级) | 2015-01-23 11:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册