Mengelakkan Ralat "lajur tidak wujud" Apabila Menggunakan Alias dalam Klausa PostgreSQL WHERE
Pertanyaan PostgreSQL boleh membuang ralat "lajur tidak wujud" apabila menggunakan alias dalam klausa WHERE
, walaupun alias ditakrifkan dalam senarai SELECT
. Ini berlaku kerana klausa WHERE
diproses sebelum senarai SELECT
, bermakna alias belum lagi dikenali.
Untuk mengatasinya, gunakan klausa WITH
(juga dikenali sebagai Ungkapan Jadual Biasa atau CTE). Klausa WITH
mencipta set hasil bernama sementara, membolehkan anda merujuk alias dalam pertanyaan utama.
Berikut ialah contoh yang menggambarkan penyelesaian:
<code class="language-sql">WITH jobs_with_lead_state AS ( SELECT jobs.*, CASE WHEN lead_informations.state IS NOT NULL THEN lead_informations.state ELSE 'NEW' END AS lead_state FROM jobs LEFT JOIN lead_informations ON lead_informations.job_id = jobs.id AND lead_informations.mechanic_id = 3 ) SELECT * FROM jobs_with_lead_state WHERE lead_state = 'NEW';</code>
Pertanyaan yang disemak ini mentakrifkan CTE bernama jobs_with_lead_state
. CTE melaksanakan operasi SELECT
dan JOIN
awal, menghasilkan alias lead_state
. Pertanyaan utama kemudiannya menggunakan CTE ini, membenarkan klausa WHERE
merujuk lead_state
dengan betul. Pendekatan ini mengelakkan ralat dengan memastikan alias tersedia semasa WHERE
penilaian klausa.
Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Alias dalam PostgreSQL WHERE Klausa Tanpa Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!