在 Postgres 的 WHERE 子句中引用别名
在 PostgreSQL 中,在 WHERE 子句中引用别名可能会导致类似“列不存在”的错误。存在。”发生这种情况是因为 WHERE 子句在 SELECT 子句中定义别名之前执行。
为什么不可能
在 SQL 中,子句按特定顺序执行:WHERE 、来自、分组依据、具有、选择、排序依据。这意味着当 Postgres 遇到 WHERE 子句时,它还不知道您在 SELECT 子句中定义的任何别名。
解决方案
要解决此问题,您必须重写查询以避免在 WHERE 子句中使用别名。相反,直接指定要比较的表达式。例如,以下查询正确选择“pk”列的第二到第六个字符(转换为整数)大于 90 的行:
SELECT SUBSTRING(pk, 6, 2)::INT AS _year FROM listing WHERE SUBSTRING(pk, 6, 2)::INT > 90
注意: 此限制仅适用于 SELECT 子句中定义的别名。在其他子句中定义的别名,例如 FROM 或 JOIN,可以在后续子句中使用。
以上是如何在PostgreSQL的WHERE子句中正确使用别名?的详细内容。更多信息请关注PHP中文网其他相关文章!