解决 WHERE 子句中的 Postgresql 别名问题
在 WHERE 子句中使用别名时,Postgresql 查询有时会抛出错误,指示列不存在。发生这种情况是因为 WHERE 子句的计算先于 SELECT 子句,使得 SELECT 中定义的别名不可用。
解决方案涉及使用通用表表达式 (CTE)。 CTE 创建一个临时的命名结果集,稍后可以在查询中(包括在 WHERE 子句中)引用该结果集。这有效地允许在 WHERE 条件中使用别名。 这是一个例子:
<code class="language-sql">WITH job_details AS ( SELECT jobs.*, CASE WHEN lead_informations.state IS NOT NULL THEN lead_informations.state ELSE 'NEW' END AS lead_status FROM jobs LEFT JOIN lead_informations ON lead_informations.job_id = jobs.id AND lead_informations.mechanic_id = 3 ) SELECT * FROM job_details WHERE lead_status = 'NEW';</code>
CTE“job_details”生成一个临时表,其中包含别名列“lead_status”。 然后,WHERE 子句无缝地使用此别名,就像引用标准表列一样。 这种方法增强了查询灵活性和可读性。
以上是如何在 Postgresql WHERE 子句中使用别名?的详细内容。更多信息请关注PHP中文网其他相关文章!