在 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中文网其他相关文章!