在 PostgreSQL WHERE 子句中使用别名时避免“列不存在”错误
在 WHERE
子句中使用别名时,PostgreSQL 查询可能会抛出“列不存在”错误,即使别名是在 SELECT
列表中定义的。 发生这种情况是因为 WHERE
子句是在 列表之前处理 SELECT
的,这意味着别名尚未被识别。
要克服这个问题,请使用 WITH
子句(也称为通用表表达式或 CTE)。 WITH
子句创建临时命名结果集,允许您在主查询中引用别名。
这是一个说明解决方案的示例:
<code class="language-sql">WITH jobs_with_lead_state AS ( SELECT jobs.*, CASE WHEN lead_informations.state IS NOT NULL THEN lead_informations.state ELSE 'NEW' END AS lead_state FROM jobs LEFT JOIN lead_informations ON lead_informations.job_id = jobs.id AND lead_informations.mechanic_id = 3 ) SELECT * FROM jobs_with_lead_state WHERE lead_state = 'NEW';</code>
此修订后的查询定义了一个名为 jobs_with_lead_state
的 CTE。 CTE 执行初始 SELECT
和 JOIN
操作,生成 lead_state
别名。然后主查询使用此 CTE,允许 WHERE
子句正确引用 lead_state
。 此方法通过确保别名在 WHERE
子句评估期间可用来避免错误。
以上是如何在 PostgreSQL WHERE 子句中使用别名而不出现错误?的详细内容。更多信息请关注PHP中文网其他相关文章!