PostgreSQL WHERE Klausa dan Alias Lajur: Penyelesaian
Pertanyaan PostgreSQL kadangkala membuang ralat "lajur [nama_alias] tidak wujud" apabila menggunakan alias lajur dalam klausa WHERE. Ini kerana PostgreSQL memproses klausa SELECT sebelum klausa WHERE, bermakna alias belum ditentukan.
Penyelesaian Berkesan: Klausa WITH (Ungkapan Jadual Biasa)
Cara yang paling boleh dipercayai untuk mengendalikan perkara ini ialah menggunakan klausa WITH (juga dikenali sebagai Ungkapan Jadual Biasa atau CTE). CTE pada asasnya mencipta set hasil sementara yang dinamakan daripada subkueri, membolehkan anda menggunakan alias yang ditakrifkan dalam CTE dalam bahagian berikutnya pertanyaan utama anda, termasuk klausa WHERE.
Berikut ialah contoh ilustrasi:
<code class="language-sql">WITH job_details AS ( SELECT jobs.*, CASE WHEN lead_informations.state IS NOT NULL THEN lead_informations.state ELSE 'NEW' END AS lead_status -- Note: Changed alias for clarity FROM jobs LEFT JOIN lead_informations ON lead_informations.job_id = jobs.id AND lead_informations.mechanic_id = 3 ) SELECT * FROM job_details WHERE lead_status = 'NEW'; -- Now referencing the alias correctly</code>
Pertanyaan yang disemak ini mentakrifkan CTE yang dipanggil job_details
. Penciptaan gabungan dan alias berlaku dalam CTE. Pertanyaan utama kemudiannya menggunakan CTE ini, dan alias lead_status
tersedia dalam klausa WHERE, mengelakkan ralat. Pendekatan ini menyediakan penyelesaian yang bersih dan cekap kepada isu PostgreSQL biasa ini.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Alias Lajur dalam PostgreSQL WHERE Klausa Tanpa Mendapat Ralat 'lajur [alias_name] tidak wujud'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!