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

Mengapa Saya Tidak Boleh Menggunakan Alias ​​Lajur dalam SQL GROUP BY Klausa?

DDD
DDDasal
2025-01-20 21:07:091017semak imbas

Why Can't I Use Column Aliases in SQL GROUP BY Clauses?

SQL GROUP MENGIKUT Klausa dan Alias ​​Penggunaan: Memahami Had

Pemprosesan pertanyaan SQL mengikut susunan tertentu, memberi kesan kepada cara alias berkelakuan dalam fasal GROUP BY. Artikel ini menjelaskan tingkah laku ini dan sebab asasnya.

Mari kita periksa isu pertanyaan 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 cacat kerana FirstLetter, alias yang ditakrifkan dalam klausa SELECT, digunakan dalam klausa GROUP BY. Pendekatan yang betul ialah menggunakan ungkapan sebenar substring(itemName, 1,1) dalam klausa GROUP BY.

Sebab sekatan ini berpunca daripada susunan pemprosesan SQL standard:

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY

Oleh kerana klausa GROUP BY dilaksanakan sebelum klausa SELECT, alias FirstLetter belum lagi wujud apabila klausa GROUP BY diproses. Pangkalan data seperti Oracle dan SQL Server mematuhi perintah ini dengan ketat, menghalang penggunaan alias daripada klausa SELECT dalam GROUP BY.

Walau bagaimanapun, pangkalan data tertentu seperti MySQL dan PostgreSQL menawarkan sambungan yang membenarkan penggunaan alias dalam GROUP BY. Tingkah laku bukan standard ini tidak konsisten secara universal, menjadikannya penting untuk mengesahkan keserasian dengan sistem pangkalan data khusus anda. Untuk SQL mudah alih yang boleh dipercayai, sentiasa gunakan ungkapan asas dalam klausa GROUP BY dan bukannya bergantung pada alias.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Alias ​​Lajur dalam SQL GROUP BY Klausa?. 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