MySQL WHERE Klausa: Had Alias
MySQL membenarkan lajur pengaliasan untuk kebolehbacaan yang dipertingkatkan dan untuk mencipta ungkapan baharu dalam pertanyaan. Walau bagaimanapun, penggunaan alias secara langsung dalam klausa WHERE
selalunya mengakibatkan ralat "lajur tidak diketahui". Ini kerana fasal WHERE
menapis baris sebelum alias diberikan.
Penyelesaian:
Satu penyelesaian melibatkan penggunaan klausa HAVING
. Tidak seperti WHERE
, HAVING
mengendalikan selepas pengumpulan dan pengagregatan, membenarkan rujukan kepada alias yang dibuat dalam pertanyaan:
<code class="language-sql">SELECT *, AVG(rev_rating) AS avg_rating FROM reviews GROUP BY rev_id HAVING avg_rating > 5;</code>
Di sini, avg_rating
dirujuk dengan betul dalam HAVING
.
Untuk mencapai penapisan serupa dalam klausa WHERE
, anda mesti menggantikan alias dengan ungkapan lengkapnya:
<code class="language-sql">SELECT * FROM reviews WHERE (SUM(reviews.rev_rating) / COUNT(reviews.rev_id)) > 5;</code>
Pertimbangan Penting:
Klausa WHERE
tidak menyokong semua ungkapan, terutamanya fungsi agregat seperti SUM()
atau AVG()
yang digunakan dalam alias. Dalam kes sedemikian, HAVING
adalah penting.
Seperti yang dijelaskan oleh dokumentasi MySQL, merujuk alias lajur dalam WHERE
tidak dibenarkan kerana nilainya mungkin tidak dikira pada masa WHERE
pelaksanaan klausa.
Atas ialah kandungan terperinci Bolehkah saya Menggunakan Alias dalam Klausa WHERE MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!