使用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都是我的实体表中的实数列.
作为参考,我使用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' )
我的大脑让我失望了 – 任何人都可以帮助我搞清楚吗?
解决方法
您不能像WHERE子句那样使用SELECT子句中的别名(如此处的virtual_prices).
您可以在ORDER BY中使用它们,但不能在WHERE中使用它们.