Masalahnya adalah Anda tidak dapat mencampur select
dan set
dalam satu pernyataan, pasti akan ada kesalahan sintaks:
select*from t where 1 and [email protected]=1;
Jika Anda ingin melakukan set
dalam select
, gunakan titik dua sama dengan
sintaksis. Ubah ini:
select*from t where 1 and [email protected]=1;
menjadi:
select*,@a:=1 from t where 1;
Inilah cara Anda memperbarui variabel pada setiap baris:
create table t(id int); insert t values(1),(2),(3);
[email protected]=0;
[email protected]:=id from t;
Dan Anda bahkan dapat melakukan concat
:
[email protected]='0';
select @a:=concat(@a,',',id)from t;
Atau concat
tanpa 0
leading di depan :
[email protected]='';
select @a:=concat(@a,if(@a='','',','),id)from t;
Namun, manual secara eksplisit menyatakan bahwa ini berbahaya:
Ini juga telah disebutkan di Xaprb .
Terakhir, jika Anda melakukan aneh hal-hal seperti menetapkan jenis nilai yang berbeda ke variabel dan lain-lain, checkout panduan untuk memastikan Anda memahami mekanisme yang rumit.