T10*_*000 2 sql postgresql activerecord
我要加入两个表: 品种 + 品种特性(bc)
但我收到以下错误:
PG :: UndefinedColumn:错误:列“ val”不存在第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
Run Code Online (Sandbox Code Playgroud)
(通过Active Record在Postgres上执行此查询)
您不能val在这样的where子句中使用表达式别名。
这是因为在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
Run Code Online (Sandbox Code Playgroud)
但是,可以在order by子句中使用别名。