Bolehkah saya Mentakrifkan Pembolehubah dalam SELECT dan Menggunakannya dalam Pernyataan yang Sama?
Kemungkinan untuk mentakrifkan dan menggunakan pembolehubah dalam kenyataan SELECT yang sama sering dipersoalkan. Pertimbangkan contoh berikut:
SELECT @z:=SUM(item), 2*@z FROM TableA;
Dalam senario sedemikian, lajur kedua secara konsisten mengembalikan NULL. Ini adalah pelik kerana operasi serupa menggunakan prosedur tersimpan berfungsi seperti yang dijangkakan:
SELECT @z:=someProcedure(item), 2*@z FROM TableA;
Penjelasan
Dokumentasi MySQL secara eksplisit menyatakan bahawa memberikan nilai kepada pembolehubah pengguna dan membacanya dalam pernyataan yang sama adalah tidak boleh dipercayai. Susunan penilaian untuk pembolehubah pengguna tidak ditentukan dan mungkin berbeza-beza berdasarkan elemen pernyataan dan versi Pelayan MySQL. Oleh itu, hasil yang diharapkan tidak dapat dijamin.
Penyelesaian
Untuk mencapai hasil yang diinginkan, anda boleh menggunakan subquery:
select @z, @z*2 from (SELECT @z:=sum(item) FROM TableA ) t;
Atas ialah kandungan terperinci Bolehkah saya Menggunakan Pembolehubah Ditakrifkan Pengguna dalam Pernyataan SELECT MySQL Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!