gpt4 book ai didi

postgresql - 使用 CASE 时 Postgres 未定义的列

转载 作者:行者123 更新时间:2023-11-29 12:32:58 25 4
gpt4 key购买 nike

使用此 SQL,我可以将 bool 列转换为文本:

SELECT *, (CASE WHEN bars.some_cond THEN 'Yes' ELSE 'No' END) AS some_cond_alpha
FROM "foos"
INNER JOIN "bars" ON "bars"."id" = "foos"."bar_id";

那么,当我尝试在 WHERE 子句中使用它时,为什么会出现 PG::UndefinedColumn: ERROR: column "some_cond_alpha"does not exist

SELECT *, (CASE WHEN bars.some_cond THEN 'Yes' ELSE 'No' END) AS some_cond_alpha
FROM "foos"
INNER JOIN "bars" ON "bars"."id" = "foos"."bar_id"
WHERE (some_cond_alpha ILIKE '%y%');

最佳答案

这是因为该列是即时创建的,并不存在。可能在以后的 PG 版本中它会,但现在你不能在 WHERE 子句中引用别名列,尽管出于某种原因你可以在 GROUP BY子句(别问我为什么GROUP BY更友好)

为了解决这个问题,我会将查询变成一个子查询,然后按如下方式查询子查询之外的列:

select *
from (
SELECT *, (CASE WHEN bars.some_cond THEN 'Yes' ELSE 'No' END) AS some_cond_alpha
FROM "foos"
INNER JOIN "bars" ON "bars"."id" = "foos"."bar_id"
) x
WHERE (x.some_cond_alpha ILIKE '%y%')

注意: 在将来的某个时候,您可能能够在 WHERE 子句中引用别名列。在以前的版本中,您不能在 GROUP BY 子句中引用别名,但从 9.4 开始就可以...

关于postgresql - 使用 CASE 时 Postgres 未定义的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32996173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com