Sebab dan penyelesaian untuk alias tidak sah dalam klausa MySQL WHERE
Dalam MySQL, menggunakan alias dalam klausa WHERE kadangkala mengakibatkan ralat "lajur tidak diketahui" yang mengelirukan. Untuk menyelesaikan masalah ini, adalah penting untuk memahami cara alias berkelakuan.
Alias pada asasnya ialah nama panggilan yang diberikan kepada lajur atau ungkapan, selalunya digunakan untuk memudahkan pertanyaan yang rumit. Walau bagaimanapun, skop alias yang sah terhad kepada subkueri atau CTE (ungkapan jadual biasa) masing-masing. Ini bermakna bahawa alias yang ditakrifkan dalam subkueri atau CTE tidak boleh diakses terus dalam pertanyaan luar.
MySQL menghadapi had ini jika anda cuba menggunakan alias dalam klausa WHERE tanpa mengulangi ungkapan yang diwakilinya terlebih dahulu. Klausa WHERE dinilai sebelum subkueri atau CTE, jadi ia tidak mengetahui sebarang alias yang ditentukan.
Salah satu cara untuk menyelesaikan masalah ini ialah menggunakan klausa HAVING, yang dijalankan selepas subkueri atau CTE dinilai dan mempunyai akses kepada alias yang ditakrifkan di dalamnya. Contohnya:
<code>HAVING avg_rating > 5</code>
Walau bagaimanapun, sesetengah ungkapan, seperti yang mengandungi fungsi agregat seperti SUM, mungkin tidak sesuai untuk dimasukkan dalam klausa WHERE. Dalam kes ini, klausa HAVING mesti digunakan sebaliknya.
Untuk mengulangi, dokumentasi MySQL dengan jelas menyatakan:
Dengan mengikuti garis panduan ini, anda boleh menggunakan alias dalam pertanyaan MySQL dengan cekap sambil mengelakkan kemungkinan perangkap."Rujukan kepada alias lajur tidak dibenarkan dalam klausa WHERE kerana nilai lajur mungkin belum ditentukan apabila klausa WHERE dilaksanakan."
Atas ialah kandungan terperinci Mengapa MySQL WHERE Klausa Kadang-kadang Gagal Mengenali Alias?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!