Mendefinisikan dan Menggunakan Pembolehubah dalam Pernyataan Pilihan
Dalam SQL, biasanya tidak disyorkan untuk memberikan nilai kepada pembolehubah pengguna dan gunakannya dalam pernyataan pilih yang sama. Dokumentasi MySQL secara eksplisit menyatakan bahawa susunan penilaian untuk ungkapan tersebut tidak ditentukan dan mungkin berbeza-beza berdasarkan elemen pernyataan dan keluaran pelayan.
Untuk menggambarkan perkara ini, pertimbangkan pertanyaan berikut:
SELECT @z:=SUM(item), 2*@z FROM TableA;
Dalam pertanyaan ini, anda menjangkakan lajur kedua mengembalikan nilai @z didarab dengan dua. Walau bagaimanapun, MySQL boleh mengembalikan NULL, kerana susunan penilaian tidak dijamin. Tingkah laku ini berbeza daripada menggunakan prosedur tersimpan dan bukannya pembolehubah pengguna, seperti ditunjukkan di bawah:
SELECT @z:=someProcedure(item), 2*@z FROM TableA;
Dalam kes ini, hasil yang dijangkakan diperoleh kerana panggilan prosedur tersimpan dinilai sebelum penetapan pembolehubah.
Untuk menyelesaikan isu ini dan mentakrifkan pembolehubah dalam penyataan pilih, anda boleh menggunakan subkueri:
select @z, @z*2 from (SELECT @z:=sum(item) FROM TableA ) t;
Pendekatan ini memastikan bahawa penetapan pembolehubah berlaku sebelum ia digunakan dalam pertanyaan luar.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mentakrifkan dan Menggunakan Pembolehubah Dengan Selamat Dalam Pernyataan SQL SELECT?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!