在 PostgreSQL WHERE 子句中使用別名時避免「列不存在」錯誤
在 WHERE
子句中使用別名時,PostgreSQL 查詢可能會拋出「列不存在」錯誤,即使別名是在 SELECT
清單中定義的。 發生這種情況是因為 WHERE
子句是在 列表之前處理 SELECT
的,這表示別名尚未被識別。
要克服這個問題,請使用 WITH
子句(也稱為通用表表達式或 CTE)。 WITH
子句建立臨時命名結果集,讓您在主查詢中引用別名。
這是一個說明解決方案的範例:
<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>
此修訂後的查詢定義了一個名為 jobs_with_lead_state
的 CTE。 CTE 執行初始 SELECT
和 JOIN
操作,產生 lead_state
別名。然後主查詢使用此 CTE,允許 WHERE
子句正確引用 lead_state
。 此方法透過確保別名在 WHERE
子句評估期間可用來避免錯誤。
以上是如何在 PostgreSQL WHERE 子句中使用別名而不出現錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!