首頁 > 資料庫 > mysql教程 > 為什麼我的 PostgreSQL WHERE 子句無法辨識我的 SELECT 別名列?

為什麼我的 PostgreSQL WHERE 子句無法辨識我的 SELECT 別名列?

Barbara Streisand
發布: 2025-01-20 20:34:16
原創
137 人瀏覽過

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

PostgreSQL:解決 WHERE 子句中的別名列問題

PostgreSQL 的 WHERE 子句無法辨識 SELECT 別名的錯誤源自於資料庫的查詢處理順序。 與其他一些系統(如 MySQL)不同,PostgreSQL 在 WHERE 子句之前處理 子句 。因此,僅在 SELECT 清單中定義的別名在 SELECT 子句中不可用。 WHERE

有效的解:通用表表達式(CTE)

最有效的解決方案是採用通用表表達式(CTE)。 CTE 充當臨時的命名結果集,允許您定義別名,然後在查詢中引用它們:

<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>
登入後複製
此改進的查詢使用 CTE

來定義 jobs_refined。 然後 lead_state 子句可以正確使用此別名,因為 CTE 已經處理並定義了它。 這種方法避免了最初的錯誤,並提供了更清晰、更易讀的查詢。 WHERE

以上是為什麼我的 PostgreSQL WHERE 子句無法辨識我的 SELECT 別名列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板