O problema é que você não pode misturar
select
e set
em uma declaração, certamente haverá erro de sintaxe:select*from t where 1 and [email protected]=1;
Se você quiser fazer
set
dentro de select
, use os dois pontos são iguais
sintaxe. Mude isso:select*from t where 1 and [email protected]=1;
para dentro:
select*,@a:=1 from t where 1;
Veja como você atualiza a variável em cada fileira:
create table t(id int); insert t values(1),(2),(3);
[email protected]=0;
[email protected]:=id from t;
E você pode até fazer
concat
:[email protected]='0';
select @a:=concat(@a,',',id)from t;
Ou
concat
sem o 0
inicial :[email protected]='';
select @a:=concat(@a,if(@a='','',','),id)from t;
No entanto, o manual explicitamente afirma que isso é perigoso:
Isso também foi mencionado no Xaprb .
Por último, se você estiver fazendo peculiar coisas como atribuir diferentes tipos de valor à variável e etc, checkout o manual para ter certeza de que você entende os intrincados mecanismos.