PostgreSQL: Menangani Isu Lajur Alias dalam Klausa WHERE
Menghadapi ralat apabila klausa WHERE
PostgreSQL gagal mengenali SELECT
alias berpunca daripada susunan pemprosesan pertanyaan pangkalan data. Tidak seperti beberapa sistem lain (seperti MySQL), PostgreSQL memproses klausa WHERE
sebelum klausa SELECT
. Oleh itu, alias yang ditakrifkan hanya dalam senarai SELECT
tidak tersedia dalam klausa WHERE
.
Penyelesaian Berkesan: Ungkapan Jadual Biasa (CTE)
Penyelesaian yang paling berkesan ialah menggunakan Common Table Expression (CTE). CTE bertindak sebagai set hasil sementara yang dinamakan, membolehkan anda mentakrifkan alias dan kemudian merujuknya kemudian dalam pertanyaan:
<code class="language-sql">WITH jobs_refined 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_refined WHERE lead_state = 'NEW';</code>
Pertanyaan dipertingkat ini menggunakan CTE jobs_refined
untuk mentakrifkan lead_state
. Klausa WHERE
kemudiannya boleh menggunakan alias ini dengan betul kerana CTE telah memproses dan mentakrifkannya. Pendekatan ini mengelakkan ralat asal dan menyediakan pertanyaan yang lebih bersih dan mudah dibaca.
Atas ialah kandungan terperinci Mengapa Klausa PostgreSQL WHERE Saya Tidak Mengenali Lajur Alias PILIH Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!