Rumah > pangkalan data > tutorial mysql > Mengapa Klausa PostgreSQL WHERE Saya Tidak Mengenali Lajur Alias ​​PILIH Saya?

Mengapa Klausa PostgreSQL WHERE Saya Tidak Mengenali Lajur Alias ​​PILIH Saya?

Barbara Streisand
Lepaskan: 2025-01-20 20:34:16
asal
135 orang telah melayarinya

Why Doesn't My PostgreSQL WHERE Clause Recognize My SELECT Alias Column?

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>
Salin selepas log masuk

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!

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