2010-10-21 3 views
15

Я хочу знать, если есть способ, чтобы использовать пользовательскую переменную в WHERE предложении, как в этом примере:MySQL Пользовательская переменная в ИНЕКЕ

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

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

+0

Что вы ожидаете от запроса? –

+0

В реальном сценарии я хочу определить переменную, чтобы получить смещение LOCATE() подстроки в поле. Я использую его много раз в инструкции SELECT. Проблема в том, что я хочу показать только результаты, у которых это смещение больше нуля. Я знаю, что я могу использовать другое предложение LOCATE() в WHERE, но почему эта переменная не работает в предложении WHERE? –

ответ

16

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

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

Я использовал аналогичные запросы для эмуляции оконных функций в MySQL. Например. Row sampling - просто пример использования переменных в одном операторе

+0

Подзапрос в предложении FROM ... какой полезный трюк! Спасибо! :) –

3

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

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

это, похоже, не работает ...!? – Raffael

10

Из страницы руководства MySQL на User Defined Variables:

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

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

SET @id = 10; 
SELECT id, location, @id FROM songs WHERE id = @id; 
0

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

SET @identifier = 7; 
SELECT * FROM test where identifier = @identifier; 
Смежные вопросы