Rumah > pangkalan data > tutorial mysql > Mengapa Saya Tidak Boleh Menggunakan Alias ​​Lajur dalam Subquery Klausa MySQL WHERE?

Mengapa Saya Tidak Boleh Menggunakan Alias ​​Lajur dalam Subquery Klausa MySQL WHERE?

Linda Hamilton
Lepaskan: 2025-01-22 08:12:11
asal
476 orang telah melayarinya

Why Can't I Use a Column Alias in a MySQL WHERE Clause Subquery?

MySQL WHERE Subquery Klausa: Isu dan Penyelesaian Alias ​​Lajur

Menggunakan alias lajur dalam subquery klausa MySQL WHERE selalunya membawa kepada ralat seperti "#1054 - Lajur tidak diketahui 'guaranteed_postcode' dalam 'IN/ALL/ANY subquery'." Ini timbul daripada percubaan untuk menapis hasil berdasarkan alias (guaranteed_postcode dalam kes ini) sebelum ia sebenarnya ditakrifkan oleh pertanyaan.

Senario Masalah:

Senario biasa melibatkan pertanyaan yang menggabungkan jadual (cth., 'pengguna' dan 'lokasi') dan mencipta lajur baharu (seperti guaranteed_postcode daripada subrentetan lajur 'mentah'). Percubaan seterusnya untuk menapis menggunakan alias yang baru dibuat ini dalam subkueri klausa WHERE gagal.

Mengapa Gagal:

MySQL memproses klausa WHERE sebelum menyelesaikan alias. Oleh itu, alias guaranteed_postcode tidak diketahui pada titik WHERE pelaksanaan klausa. Had ini konsisten dengan piawaian SQL.

Pematuhan Standard SQL:

MySQL, mematuhi piawaian SQL, mengehadkan penggunaan alias lajur dalam fasal WHERE. Alias ​​digunakan dengan betul dalam klausa GROUP BY, ORDER BY dan HAVING.

Penyelesaian Berkesan menggunakan HAVING:

Penyelesaian yang disyorkan ialah menggunakan klausa HAVING. HAVING direka untuk menapis data agregat, tetapi ia boleh mengendalikan situasi ini dengan berkesan. Begini cara untuk menulis semula pertanyaan:

HAVING `guaranteed_postcode` NOT IN (
  SELECT `postcode` FROM `postcodes` WHERE `region` IN ('australia')
)
Salin selepas log masuk

Pendekatan ini memastikan alias guaranteed_postcode dinilai selepas lajur dicipta, sekali gus menyelesaikan ralat. Klausa HAVING menapis keputusan dengan betul berdasarkan keadaan yang diingini.

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

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan