использование coalesce для установки начального значения переменной в запросе

#mysql

#mysql

Вопрос:

Извините, если об этом уже спрашивали, но поиск coalesce выдает кучу результатов, которые мне не помогают…

В mysql я пытаюсь использовать coalesce для установки начального значения для переменной, которая задается выражением, зависящим от существующего значения. Я бы очень хотел сделать это с помощью одного оператора, но у меня возникла проблема, когда значение, которое возвращается из coalesce, когда переменная равна null, кажется, не «прилипает», и я каждый раз получаю начальное значение. Странная вещь, если я изначально задаю переменной значение null, она работает так, как ожидалось.

Рассмотрим этот запрос:

 select @y := coalesce(@y 1, 5)
from table
limit 5;
 

Он возвращает:

 5
5
5
5
5 
 

Но это:

 set @z = null;
select @z := coalesce(@z 1, 5)
from table
limit 5;
 

Возвращает то, что я ожидаю:

 5
6
7
8
9
 

Это ошибка или ожидаемое поведение? Является ли решение просто изначально установить для переменной значение null?

Ответ №1:

Вы можете инициализировать переменные SQL в ссылке «(выберите …) псевдоним», как показано ниже. Вам просто нужно убедиться, что вы используете псевдоним, например, я сделал как SQLVars, иначе он подавится вами. Затем вы можете создавать столько, сколько вам нужно, из любых типов данных.

 select
      @z := z 1 as NextNumber
   from table,
      ( select @z := 5, 
               @AnotherVar := 'First Value',
               @AnythingElse := 390.290 ) SQLVars   
  limit 5;