MySQL子查询中的用户变量

MySQL子查询中的用户变量,mysql,database,Mysql,Database,嗯。。。我只是想知道为什么第四列的值是0而不是1。因为这是在@foo:=1之前计算的。基本上,在选择之前,将对中的任何内容进行评估 它实际上应该是空的,但我猜您在其他地方为会话变量赋值为零。Ben,您是对的。零是会话变量的原始值。无论如何,是否无法检索值1?在检索时,尚未为其分配值1。您可以在FROM子句中指定该值,它将首先被指定。选择@foo,从中选择subselect.foo,从中选择@foo:=1作为初始,从中选择@foo作为foo subselect,从中选择@foo作为foo subs

嗯。。。我只是想知道为什么第四列的值是0而不是1。

因为这是在@foo:=1之前计算的。基本上,在选择之前,将对中的任何内容进行评估


它实际上应该是空的,但我猜您在其他地方为会话变量赋值为零。

Ben,您是对的。零是会话变量的原始值。无论如何,是否无法检索值1?在检索时,尚未为其分配值1。您可以在FROM子句中指定该值,它将首先被指定。选择@foo,从中选择subselect.foo,从中选择@foo:=1作为初始,从中选择@foo作为foo subselect,从中选择@foo作为foo subselect,subselect将始终在您的选择分配“选择@foo:=1”之前进行。您可以选择SELECT@foo FROM SELECT@foo:=1 a,SELECT@foo FROM SELECT@foo AS foo subselect`前面的FROM子句将在子选择之前将值赋给@foo。
Query Output:
> 

SELECT
  @foo := 1,
  @foo,
  (SELECT @foo),
  (SELECT foo FROM (SELECT @foo AS foo) subselect)

+ -------------- + --------- + ------------------ + ----------------------------------------------------- +
| @foo := 1      | @foo      | (SELECT @foo)      | (SELECT foo FROM (SELECT @foo AS foo) subselect)      |
+ -------------- + --------- + ------------------ + ----------------------------------------------------- +
| 1              | 1         | 1                  | 0                                                     |
+ -------------- + --------- + ------------------ + ----------------------------------------------------- +
1 rows