PostgreSQL:解决 WHERE 子句中的别名列问题
PostgreSQL 的 WHERE
子句无法识别 SELECT
别名的错误源于数据库的查询处理顺序。 与其他一些系统(如 MySQL)不同,PostgreSQL 在 WHERE
子句之前处理 子句 。因此,仅在 SELECT
列表中定义的别名在 SELECT
子句中不可用。WHERE
有效的解决方案:通用表表达式(CTE)
最有效的解决方案是采用通用表表达式(CTE)。 CTE 充当临时的命名结果集,允许您定义别名,然后在查询中引用它们:
<code class="language-sql">WITH jobs_refined 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_refined WHERE lead_state = 'NEW';</code>
来定义 jobs_refined
。 然后 lead_state
子句可以正确使用此别名,因为 CTE 已经处理并定义了它。 这种方法避免了最初的错误,并提供了更清晰、更易读的查询。WHERE
以上是为什么我的 PostgreSQL WHERE 子句无法识别我的 SELECT 别名列?的详细内容。更多信息请关注PHP中文网其他相关文章!