Пользовательская переменная в подзапросе MySQL

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

Ну... я просто хочу знать, почему значение четвертого столбца равно 0 вместо 1.

1 ответ

Решение

Потому что это FROM (SELECT @foo AS foo) оценивается до этого @foo := 1, В основном все, что в FROM будет оцениваться до вашего SELECT.

Это на самом деле должно быть нулевым, но я предполагаю, что вы присвоили своей переменной сеанса значение ноль где-то еще.

Другие вопросы по тегам