Mengapa saya tidak boleh menggunakan alias agregat dalam klausa HAVING?
Pertimbangkan pernyataan SQL berikut:
select col1,count(col2) as col7 from --some join operation group by col1 having col7 >= 3 -- replace col7 by count(col2) to make the code work
Kod ini menjana ralat yang menunjukkan bahawa "col7" ialah nama lajur yang tidak sah. Mengapa begitu?
Sebabnya terletak pada susunan pelaksanaan pernyataan SQL. Klausa HAVING dinilai sebelum klausa SELECT. Ini bermakna apabila klausa HAVING dinilai, alias "col7" untuk kiraan fungsi agregat(col2) belum ditakrifkan.
SQL melaksanakan pertanyaan dalam urutan berikut:
Oleh itu, dalam kod yang diberikan, klausa HAVING cuba menggunakan alias "col7" sebelum ia ditakrifkan dalam klausa SELECT. Untuk menyelesaikan isu ini, anda boleh menggantikan "col7" dengan fungsi agregat itu sendiri:
select col1,count(col2) from --some join operation group by col1 having count(col2) >= 3
Ini membenarkan klausa HAVING menilai dengan betul kiraan agregat col2.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Alias Agregat dalam Klausa SQL HAVING?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!