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
445 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:

<code class="language-sql">HAVING `guaranteed_postcode` NOT IN (
  SELECT `postcode` FROM `postcodes` WHERE `region` IN ('australia')
)</code>
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!

sumber:php.cn
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