無法在WHERE 子句中引用別名
嘗試在SQL 語句的WHERE 子句中引用別名時,使用者可能會遇到錯誤表示指定的列不存在。出現此錯誤的原因是 SQL 執行遵循特定順序,即 WHERE 子句在 SELECT 子句之前計算。因此,執行 WHERE 子句時,無法辨識 SELECT 子句中定義的別名。
原因
在提供的範例中,以下查詢嘗試篩選行基於 SELECT 子句中建立的別名(_year):
SELECT SUBSTRING(pk, 6, 2)::INT AS _year FROM listing WHERE _year > 90
此查詢將產生以下結果錯誤:
ERROR: column "_year" does not exist
解決方案
要解決此問題並在WHERE 子句中引用別名,必須重寫查詢以使用基礎列:
SELECT SUBSTRING(pk, 6, 2)::INT AS _year FROM listing WHERE SUBSTRING(pk, 6, 2)::INT > 90
透過直接引用用於建立別名(_year)的欄位(pk),查詢將成功執行並檢索所需的結果。
以上是為什麼我不能在 SQL WHERE 子句中使用別名?的詳細內容。更多資訊請關注PHP中文網其他相關文章!