Rumah >pangkalan data >tutorial mysql >Mengapa Saya Tidak Boleh Menggunakan Alias ​​dalam Klausa HAVING SQL?

Mengapa Saya Tidak Boleh Menggunakan Alias ​​dalam Klausa HAVING SQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-18 15:30:151000semak imbas

Why Can't I Use Aliases in SQL's HAVING Clause?

Memahami Had Penggunaan Alias ​​dalam HAVING Klausa

Dalam SQL, nampaknya intuitif untuk menggunakan alias untuk agregat dalam klausa HAVING. Walau bagaimanapun, pendekatan ini mengakibatkan ralat "Nama lajur tidak sah" disebabkan oleh susunan penilaian khusus pertanyaan SQL.

Untuk memahami had ini, adalah penting untuk memahami cara SQL melaksanakan pertanyaan:

  1. Ia mula-mula mencipta set hasil dengan menggabungkan semua baris daripada jadual bercantum yang dinyatakan dalam FROM klausa.
  2. Klausa WHERE menapis baris yang tidak memenuhi kriterianya.
  3. Ia kemudian mengumpulkan baris berdasarkan lajur yang dinyatakan dalam klausa GROUP BY.
  4. Secara kritis, klausa HAVING dinilai sebelum pernyataan SELECT. Ini bermakna SQL belum lagi mengenali alias ditakrifkan dalam klausa SELECT pada ketika ini.
  5. Hanya selepas menilai klausa HAVING, SQL meneruskan untuk menilai ungkapan dalam senarai SELECT.

Oleh itu, memandangkan klausa HAVING dinilai sebelum klausa SELECT, alias yang diberikan kepada agregat dalam pernyataan SELECT (cth., "col7") belum diketahui SQL apabila ia menilai ungkapan HAVING. Akibatnya, ralat "Nama lajur tidak sah 'col7'" berlaku.

Sebaliknya, klausa ORDER BY dinilai selepas pernyataan SELECT, membenarkan alias yang ditakrifkan dalam klausa SELECT digunakan. Ini kerana klausa ORDER BY beroperasi pada set hasil yang dicipta oleh pernyataan SELECT.

Untuk membetulkan isu ini, gantikan alias dalam klausa HAVING dengan ungkapan agregat sebenar, seperti ditunjukkan di bawah:

select col1,count(col2)
from --some join operation
group by col1
having count(col2) >= 3

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Alias ​​dalam Klausa HAVING SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn