MySQL WHERE Klausa Alias Had dan Penyelesaian
Menggunakan alias terus dalam MySQL WHERE klausa sering mengakibatkan ralat "lajur tidak diketahui". Ini kerana klausa WHERE memproses sebelum alias ditakrifkan. Untuk mengelakkan ini, gunakan strategi ini:
1. Manfaatkan Klausa HAVING:
Klausa HAVING
direka bentuk untuk berfungsi dengan alias yang dibuat dalam pernyataan SELECT
. Sebagai contoh, untuk menapis hasil dengan penilaian purata (avg_rating
) melebihi 5:
<code class="language-sql">SELECT AVG(reviews.rev_rating) AS avg_rating FROM reviews GROUP BY product_id HAVING avg_rating > 5;</code>
2. Ulangi Ungkapan dalam Klausa WHERE:
Walaupun kurang elegan, anda boleh meniru ungkapan alias terus dalam klausa WHERE
. Ini menghapuskan pergantungan alias, tetapi mungkin meningkatkan lebihan kod:
<code class="language-sql">SELECT SUM(reviews.rev_rating) / COUNT(reviews.rev_id) AS avg_rating FROM reviews WHERE (SUM(reviews.rev_rating) / COUNT(reviews.rev_id)) > 5;</code>
3. Pertimbangan Fungsi Agregat:
Perhatikan bahawa menggunakan fungsi agregat (seperti SUM
, AVG
, COUNT
) dalam klausa WHERE
mungkin tidak disokong dalam semua senario. Klausa HAVING
biasanya diutamakan untuk menapis data agregat.
Penjelasan Manual MySQL:
Dokumentasi MySQL secara eksplisit menyatakan bahawa merujuk alias lajur dalam klausa WHERE
tidak dibenarkan kerana nilai alias mungkin belum dikira lagi semasa pelaksanaan klausa WHERE
.
Amalan Terbaik untuk Pertanyaan Kompleks:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Alias dalam MySQL WHERE Klausa Tanpa Mendapat Ralat 'Lajur Tidak Diketahui'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!