Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SET eine Variable in der SELECT-Anweisung - MySQL

Das Problem ist, dass Sie select nicht mischen können und set in einer Anweisung gibt es sicherlich einen Syntaxfehler:

select*from t where 1 and [email protected]=1;

Wenn Sie set tun möchten innerhalb von select , verwenden Sie den Doppelpunkt gleich Syntax. Ändern Sie dies:

select*from t where 1 and [email protected]=1;

in:

select*,@a:=1 from t where 1;

So aktualisieren Sie die Variable bei jedem Zeile:

create table t(id int); insert t values(1),(2),(3);
[email protected]=0;
[email protected]:=id from t;

Und Sie können sogar concat ausführen :

[email protected]='0';
select @a:=concat(@a,',',id)from t;

Oder concat ohne die führende 0 :

[email protected]='';
select @a:=concat(@a,if(@a='','',','),id)from t;

Allerdings ist das Handbuch ausdrücklich gibt an, dass dies gefährlich ist:

Dies wurde auch erwähnt auf Xaprb .

Schließlich, wenn Sie skurril machen Dinge wie das Zuweisen unterschiedlicher Werttypen zu Variablen usw. checkout das Handbuch um sicherzugehen, dass Sie die komplizierten Mechanismen verstehen.