gpt4 book ai didi

SQL 错误 - 列不存在(在 SELECT 中)

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

我正在加入两个表:breeds + breed_characteristics (bc)

但是我收到以下错误:

PG::UndefinedColumn: ERROR: column "val" does not exist LINE 11

我不确定哪里出了问题,这是我的 SQL:

SELECT                                                                      
breeds.*,
CASE bc.user_val
WHEN NULL THEN bc.value
ELSE (bc.value + (bc.user_val/2))/2
END AS val
FROM
breed_characteristics bc
INNER JOIN breeds ON breeds.id = bc.breed_id
WHERE bc.characteristic_id = 45
AND val BETWEEN 4 AND 5
ORDER BY val DESC

(通过 Active Record 在 Postgres 上执行此查询)

最佳答案

你不能像那样在 where 子句中使用表达式别名 val

是因为SQL标准中规定了SQL的执行顺序。此处,WHERE 子句在 SELECT 之前计算,因此,WHERE 子句不知道您在 SELECT 中创建的别名ORDER BY 位于 SELECT 之后,因此可以使用别名。

只需将别名替换为实际的 case 表达式,如下所示:

SELECT                                                                      
breeds.*,
CASE bc.user_val
WHEN NULL THEN bc.value
ELSE (bc.value + (bc.user_val/2))/2
END AS val
FROM
breed_characteristics bc
INNER JOIN breeds ON breeds.id = bc.breed_id
WHERE bc.characteristic_id = 45
AND CASE WHEN bc.user_val is NULL THEN bc.value
ELSE (bc.value + (bc.user_val/2))/2
END BETWEEN 4 AND 5
ORDER BY val DESC

但是,您可以在order by 子句中使用别名。

关于SQL 错误 - 列不存在(在 SELECT 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41408974/

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