Rumah >pangkalan data >tutorial mysql >Bolehkah Pernyataan Pilih MySQL Menggunakan dan Mentakrifkan Semula Pembolehubah Pengguna dengan Amanah Dalam Satu Pernyataan?

Bolehkah Pernyataan Pilih MySQL Menggunakan dan Mentakrifkan Semula Pembolehubah Pengguna dengan Amanah Dalam Satu Pernyataan?

Barbara Streisand
Barbara Streisandasal
2024-12-03 10:41:17228semak imbas

Can MySQL's Select Statement Reliably Use and Redefine User Variables Within a Single Statement?

Mendefinisikan dan Menggunakan Pembolehubah dalam Penyata Pilihan

Dalam MySQL, secara amnya tidak digalakkan untuk memberikan nilai kepada pembolehubah pengguna dan membaca nilai tersebut dalam pernyataan yang sama. Walaupun ia mungkin kelihatan berfungsi dalam senario tertentu, gelagat ini tidak dijamin dan boleh berbeza-beza bergantung pada elemen pernyataan tertentu dan versi pelayan MySQL.

Sebagai contoh, pertimbangkan pernyataan berikut:

SELECT 
    @z:=SUM(item),
    2*@z
FROM
    TableA;

Dalam kes ini, hasil yang dijangkakan ialah lajur kedua mengembalikan nilai 2 didarab dengan jumlah lajur item. Walau bagaimanapun, MySQL mungkin menilai pernyataan dalam susunan yang berbeza, menghasilkan nilai NULL untuk lajur kedua.

Sebab di sebalik tingkah laku ini ialah MySQL tidak menjamin susunan penilaian ekspresi yang melibatkan pembolehubah pengguna. Dengan mengubah sedikit penyataan, seperti memperkenalkan klausa GROUP BY, susunan penilaian mungkin berubah.

Walau bagaimanapun, terdapat penyelesaian untuk mencapai fungsi yang diingini dengan menggunakan subquery:

select @z, @z*2
from (SELECT @z:=sum(item)
      FROM TableA
     ) t;

Dalam subkueri ini, pembolehubah @z diberikan jumlah lajur item dan kemudian dipilih bersama dengan nilai dua kali gandanya. Pendekatan ini memastikan bahawa nilai pembolehubah dinilai dengan betul dan digunakan dalam lajur kedua.

Atas ialah kandungan terperinci Bolehkah Pernyataan Pilih MySQL Menggunakan dan Mentakrifkan Semula Pembolehubah Pengguna dengan Amanah Dalam Satu Pernyataan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn