使用PostgreSQL 8.4,我尝试整理以下查询:
SELECT (field_a + field_b + field_c) AS virtual_field, *
FROM "entities"
WHERE ("entities".thing_id = 9999 AND (virtual_field > 0))
AND (boolean_field = 't')
ORDER BY virtual_field DESC
不幸的是,我一直得到以下错误:
PGError: ERROR: column "virtual_field" does not exist
LINE 1: ...ies" ("entities".thing_id = 9999 AND (virtual_fiel...
^
错误消息非常明显,但如果我能找出正确的语法来实现我所要做的事情,那我就完蛋了。field_a
、field_b
和field_c
都是我的entities
表中的实列。
作为参考,我使用Rails(2.3.11)来组合查询。下面是我使用的(匿名)代码:
Thing.entities.boolean_scope.find(:all,
:select => "(field_a + field_b + field_c) AS virtual_field, *",
:conditions => ['virtual_field > ?', value],
:order => 'virtual_field DESC'
)
我的脑子出毛病了--谁能帮我弄明白吗?
2条答案
按热度按时间ff29svar1#
如果将“main”语句放入派生表中,则可以使用别名:
顺便说一句:你不需要表达式
boolean_field = 't'
(如果它真的是一个boolean
类型的列)。AND boolean_field
就足够了,因为这是一个有效的布尔表达式。ghhkc1vu2#
你不能像这样在WHERE子句中使用SELECT子句的别名(比如这里的
virtual_field
)。可以在ORDER BY中使用它们,但不能在WHERE中使用。