Alias Lajur SQL: Had dan Penyelesaian
Alias lajur SQL menawarkan cara yang mudah untuk menamakan semula lajur hasil untuk kebolehbacaan yang lebih baik. Walau bagaimanapun, penggunaan alias ini secara langsung dalam pengiraan lanjut dalam penyata SELECT
yang sama selalunya membawa kepada ralat.
Masalahnya: Ketersediaan Alias
Isu timbul kerana enjin SQL memproses klausa SELECT
secara serentak. Oleh itu, nama alias (cth., avg_time
, cnt
) belum ditakrifkan lagi apabila ia dirujuk dalam ungkapan seperti ROUND(avg_time * cnt, 2)
.
Penyelesaian: Subqueries untuk Alias Resolution
Penyelesaian yang paling berkesan ialah menyarangkan pertanyaan asal dalam subkueri. Ini mewujudkan skop baharu yang mana alias ditakrifkan dengan betul dan boleh diakses dalam klausa SELECT
pertanyaan luar.
Contoh Ilustrasi:
Berikut ialah cara untuk menyelesaikan isu menggunakan subkueri:
<code class="language-sql">SELECT stddev_time, max_time, avg_time, min_time, cnt, ROUND(avg_time * cnt, 2) AS slowdown FROM ( SELECT COALESCE(ROUND(stddev_samp(time), 2), 0) AS stddev_time, MAX(time) AS max_time, ROUND(AVG(time), 2) AS avg_time, MIN(time) AS min_time, COUNT(path) AS cnt, path FROM loadtime GROUP BY path ORDER BY avg_time DESC LIMIT 10 ) AS X;</code>
Penjelasan:
Pertanyaan dalaman mengira dan memberikan alias kepada hasil perantaraan. Pertanyaan luar kemudiannya menggunakan alias yang telah ditetapkan ini dalam pengiraannya, mengelakkan ralat asal. Penggunaan AS X
adalah pilihan tetapi memberikan nama yang jelas untuk subkueri. Pendekatan ini memastikan resolusi alias yang betul dan membolehkan pengiraan rumit yang melibatkan lajur beralias.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Alias Lajur dalam Ungkapan SELECT Seterusnya, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!