Проблемът е, че не можете да смесвате select
и set
в едно изявление със сигурност ще има синтактична грешка:
select*from t where 1 and [email protected]=1;
Ако искате да направите set
в рамките на select
, използвайте двоеточие е равно
синтаксис. Променете това:
select*from t where 1 and [email protected]=1;
в:
select*,@a:=1 from t where 1;
Ето как актуализирате променливата на всяка ред:
create table t(id int); insert t values(1),(2),(3);
[email protected]=0;
[email protected]:=id from t;
И дори можете да направите concat
:
[email protected]='0';
select @a:=concat(@a,',',id)from t;
Или concat
без водещия 0
:
[email protected]='';
select @a:=concat(@a,if(@a='','',','),id)from t;
Въпреки това ръководствотоизрично заявява, че това е опасно:
Това също беше споменато на Xaprb .
И накрая, ако правите странно неща като присвояване на различни типове стойности на променливата и т.н., изплащане ръководството за да сте сигурни, че разбирате сложните механизми.