Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mentakrifkan dan Menggunakan Pembolehubah Dengan Selamat Dalam Pernyataan SQL SELECT?

Bagaimanakah Saya Boleh Mentakrifkan dan Menggunakan Pembolehubah Dengan Selamat Dalam Pernyataan SQL SELECT?

Patricia Arquette
Lepaskan: 2024-12-02 03:56:12
asal
320 orang telah melayarinya

How Can I Safely Define and Use a Variable Within a SQL SELECT Statement?

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan