首页 >数据库 >mysql教程 >为什么我的 PostgreSQL WHERE 子句无法识别我的 SELECT 别名列?

为什么我的 PostgreSQL WHERE 子句无法识别我的 SELECT 别名列?

Barbara Streisand
Barbara Streisand原创
2025-01-20 20:34:16179浏览

Why Doesn't My PostgreSQL WHERE Clause Recognize My SELECT Alias Column?

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>
此改进的查询使用 CTE

来定义 jobs_refined。 然后 lead_state 子句可以正确使用此别名,因为 CTE 已经处理并定义了它。 这种方法避免了最初的错误,并提供了更清晰、更易读的查询。WHERE

以上是为什么我的 PostgreSQL WHERE 子句无法识别我的 SELECT 别名列?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn