Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SET uma variável na instrução SELECT - MySQL


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.