在 WHERE 子句中引用別名
在 SQL 中,查詢中語句的執行順序至關重要。特別是,WHERE 子句在 SELECT 語句之前執行。這意味著在 WHERE 子句中引用別名時,必須在嘗試使用它之前定義它。
原始查詢和錯誤
以下查詢嘗試在WHERE 子句中使用別名(_year):
SELECT SUBSTRING(pk, 6, 2)::INT AS _year FROM listing WHERE _year > 90
但是,此查詢會引發錯誤:
ERROR: column "_year" does not exist LINE 1: ...STRING (pk, 6, 2)::INT AS _year FROM listing WHERE _year > 90... ^ ********** Error ********** ERROR: column "_year" does not exist
出現此錯誤是因為在SELECT語句之前未定義別名 (_year)。
克服限制
它由於 SQL 語句的執行順序,無法在 WHERE 子句中直接引用別名。若要避免此限制,請以下列方式重寫查詢:
SELECT SUBSTRING(pk, 6, 2)::INT AS _year FROM listing WHERE SUBSTRING(pk, 6, 2)::INT > 90
在此查詢中,計算 _year 的表達式在 WHERE 子句中重複。雖然不像使用別名那麼簡潔,但這確保了在比較中使用 _year 的值之前先對其進行計算。
以上是我可以在 SQL WHERE 子句中使用別名嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!