Ответ 1
Из вашего другого вопроса я знаю, что вы имеете в виду в случае использования
SELECT variable = column FROM table;
Идите вперед и убедитесь сами...
CREATE TABLE foo (id int);
INSERT INTO foo VALUES (1), (2), (3);
SET @asdf = 2;
SET @asdf := 2; /*those are the same*/
/*As SET is always an assignment operation, it doesn't matter here if you write it with := or with =*/
SELECT id, @asdf, @asdf = id FROM foo;
возвращает
+------+-------+------------+
| id | @asdf | @asdf = id |
+------+-------+------------+
| 1 | 2 | 0 |
| 2 | 2 | 1 |
| 3 | 2 | 0 |
+------+-------+------------+
В результате a 0
в последнем столбце равно false
, a 1
равно true
.
SELECT @asdf := id FROM foo;
возвращает
+-------------+
| @asdf := id |
+-------------+
| 1 |
| 2 |
| 3 |
+-------------+
поскольку значение id
присваивается переменной @asdf
Если вы сейчас выпустили
SELECT @asdf;
он возвращает
+-------+
| @asdf |
+-------+
| 3 |
+-------+
потому что последняя строка, содержащая 3
, была выбрана последним.
SELECT @asdf := id FROM foo ORDER BY id DESC;
возвращает
+-------------+
| @asdf := id |
+-------------+
| 3 |
| 2 |
| 1 |
+-------------+
Теперь
SELECT @asdf;
возвращает
+-------+
| @asdf |
+-------+
| 1 |
+-------+
Разница теперь понятна?