Пользовательская переменная MySQL в предложении WHERE - PullRequest
17 голосов
/ 21 октября 2010

Я хочу знать, есть ли способ использовать пользовательскую переменную в предложении WHERE, как в этом примере:

SELECT id, location, @id := 10 FROM songs WHERE id = @id

Этот запрос выполняется без ошибок, но не работает должным образом.

Ответы [ 4 ]

21 голосов
/ 16 мая 2011

Недалеко от того, что предложил Майк Э., но одно утверждение:

SELECT id, location FROM songs, ( SELECT @id := 10 ) AS var WHERE id = @id;

Я использовал похожие запросы для эмуляции оконных функций в MySQL.Например, Выборка строк - просто пример использования переменных в одном выражении

11 голосов
/ 17 августа 2012

На странице справки MySQL по Определяемые пользователем переменные :

Как правило, вы никогда не должны присваивать значение пользовательской переменной и читать значение в пределах одной и той же переменной.заявление.Вы можете получить ожидаемые результаты, но это не гарантировано.

Таким образом, вы должны отделить присвоение от оператора выбора:

SET @id = 10;
SELECT id, location, @id FROM songs WHERE id = @id;
5 голосов
/ 21 октября 2010

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

SET @id := 10;
SELECT @id := 10 FROM songs WHERE id = @id;

или

SELECT @id := 10 FROM songs;
SELECT @id := 10 FROM songs WHERE id = @id;

Я использовал оба, и они оба, кажется, работают для меня.

0 голосов
/ 01 декабря 2016

Это сработало для меня!

SET @identifier = 7;
SELECT * FROM test where identifier = @identifier;
...