Rumah >pangkalan data >tutorial mysql >Mengapa Saya Tidak Boleh Menggunakan Alias dalam Klausa GROUP BY dalam Beberapa Pangkalan Data SQL?
KUMPULAN SQL MENGIKUT Klausa: Had Alias
Menggunakan alias dalam SQL GROUP BY
klausa menawarkan kemudahan, tetapi amat penting untuk memahami batasannya. Pertanyaan berikut menggambarkan masalah biasa:
<code class="language-sql">SELECT itemName as ItemName, substring(itemName, 1,1) as FirstLetter, Count(itemName) FROM table1 GROUP BY itemName, FirstLetter</code>
Pertanyaan ini gagal kerana FirstLetter
ialah alias yang ditakrifkan hanya dalam klausa SELECT
. Pangkalan data memproses fasal GROUP BY
sebelum klausa SELECT
; oleh itu, FirstLetter
belum lagi dikenali. Pertanyaan yang betul memerlukan penggunaan ungkapan asal:
<code class="language-sql">GROUP BY itemName, substring(itemName, 1,1)</code>
Had ini timbul daripada perintah pelaksanaan SQL standard:
FROM
klausaWHERE
klausaGROUP BY
klausaHAVING
klausaSELECT
klausaORDER BY
klausaPangkalan data seperti Oracle dan SQL Server dengan tegas mematuhi perintah ini. Alias mesti ditakrifkan sebelum penggunaannya dalam klausa GROUP BY
.
Sebaliknya, pangkalan data seperti MySQL dan PostgreSQL menawarkan lebih fleksibiliti dan mungkin membenarkan penggunaan alias dalam klausa GROUP BY
. Walau bagaimanapun, bergantung pada tingkah laku ini boleh membawa kepada isu mudah alih jika kod anda perlu dijalankan merentasi sistem pangkalan data yang berbeza. Untuk keserasian maksimum, amalan terbaik adalah untuk mengelakkan alias dalam klausa GROUP BY
dan sebaliknya menggunakan nama atau ungkapan lajur asal.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Alias dalam Klausa GROUP BY dalam Beberapa Pangkalan Data SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!