Vấn đề là bạn không thể kết hợp select
và set
trong một câu lệnh, chắc chắn sẽ có lỗi cú pháp:
select*from t where 1 and [email protected]=1;
Nếu bạn muốn thực hiện set
trong select
, sử dụng dấu hai chấm bằng
cú pháp. Thay đổi điều này:
select*from t where 1 and [email protected]=1;
thành:
select*,@a:=1 from t where 1;
Đây là cách bạn cập nhật biến theo từng hàng:
create table t(id int); insert t values(1),(2),(3);
[email protected]=0;
[email protected]:=id from t;
Và bạn thậm chí có thể làm concat
:
[email protected]='0';
select @a:=concat(@a,',',id)from t;
Hoặc concat
không có 0
đứng đầu :
[email protected]='';
select @a:=concat(@a,if(@a='','',','),id)from t;
Tuy nhiên, hướng dẫn sử dụng rõ ràng nói rằng điều này là nguy hiểm:
Điều này cũng đã được đề cập trên Xaprb .
Cuối cùng, nếu bạn đang làm kỳ quặc những thứ như gán các loại giá trị khác nhau cho biến và v.v., kiểm tra hướng dẫn sử dụng để chắc chắn rằng bạn hiểu các cơ chế phức tạp.