Процедура MySql с выбором с переменной обновления внутри - PullRequest
0 голосов
/ 04 марта 2012
declare prioritaC INT default 1;
select
  case
    when (b.zraneni = 0 and a.center_id is not null) then (
      a.center_id
    ) else (
      select hokejista_id
        from nahradnik
       where nahradnikTyp_id = 3 and tym_id = 1 and priorita = prioritaC
      set prioritaC = prioritaC + 1;
    )
    end as center_id_real
  from oslabeni45 a
  left join hokejista b on (a.center_id = b.id)

Почему нельзя set prioritaC = prioritaC + 1 в случае, когда выписка?Как может быть переменное приращение в select?

1 Ответ

0 голосов
/ 04 марта 2012

Суть, которую другие комментаторы кратко обозначают, состоит в том, что в MySQL есть ДВА отдельных CASE-конструкцийОдин - это оператор case, который вы используете в процедурном коде, а другой - функциональная конструкция, которую вы используете внутри оператора или предложения SELECT.

В этом примере у вас есть оператор SELECT, содержащий конструкцию CASE.Компонент результата должен быть выражением.Вы не можете помещать здесь операторы.

Вам необходимо переместить любые операторы за пределы SELECT.

...