狼头大哥,ifnull()函数的疑问;

小小小小周 2011-01-16 09:21:38
mysql> select * from en;
+------+---------+
| id | cr_name |
+------+---------+
| 1 | 北京 |
| 2 | 广州 |
| 3 | 新疆 |
+------+---------+
3 rows in set (0.00 sec)

mysql> select @a:=ifnull(@a,0)+1 from en;第一次运行
+--------------------+
| @a:=ifnull(@a,0)+1 |
+--------------------+
| 1 |
| 1 |
| 1 |
+--------------------+
3 rows in set (0.00 sec)

mysql> select @a:=ifnull(@a,0)+1 from en;第二次运行
+--------------------+
| @a:=ifnull(@a,0)+1 |
+--------------------+
| 2 |
| 3 |
| 4 |
+--------------------+
3 rows in set (0.00 sec)

mysql>

为什么第一次select的时候会否返回1;这个很令人费解;
我觉得应该是返回1 2 3..不知道为什么这样;难道是数字或是字符串的原因?
先去洗个头,等结果;
...全文
138 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小小小小周 2011-01-16
  • 打赏
  • 举报
回复
这么迟,还麻烦狼头大哥,和何大哥.辛苦了
小小小小周 2011-01-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acmain_chm 的回复:]
在SELECT中只有在结束后才会把变量的定义写入系统空间。
[/Quote]
学习~~
iihero 2011-01-16
  • 打赏
  • 举报
回复
原因确实在于@a提前没有定义。
ACMAIN_CHM 2011-01-16
  • 打赏
  • 举报
回复
@a 在第一次执行前,没有定义。 这样SELECT语句在处理每一行前,都在内存空间中找不到这个变量的定义,所以返回 NULL,

而第二次,由于第一条SELECT已经对@a 进行了定义,也就开始对这个变量进行处理了。

这个例子也说明, 在SELECT中只有在结束后才会把变量的定义写入系统空间。

56,687

社区成员

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

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