Dan*_*ail 7 postgresql ruby-on-rails
使用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
Run Code Online (Sandbox Code Playgroud)
不幸的是,我一直收到以下错误:
PGError: ERROR: column "virtual_field" does not exist
LINE 1: ...ies" ("entities".thing_id = 9999 AND (virtual_fiel...
^
Run Code Online (Sandbox Code Playgroud)
错误信息非常明显,但如果我能找出正在尝试做的正确语法,我会被诅咒.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'
)
Run Code Online (Sandbox Code Playgroud)
我的大脑失败了 - 任何人都可以帮助我解决这个问题吗?
如果将"main"语句放入派生表中,则可以使用别名:
SELECT *
FROM
(
SELECT (field_a + field_b + field_c) AS virtual_field,
entities.*
FROM entities
) t
WHERE thing_id = 9999
AND virtual_field > 0
AND boolean_field = 't'
ORDER BY virtual_field DESC
Run Code Online (Sandbox Code Playgroud)
顺便说一句:你不需要表达式boolean_field = 't'
(如果它真的是一个类型的列boolean
).AND boolean_field
这是足够的,因为这是一个有效的布尔表达式.
归档时间: |
|
查看次数: |
3080 次 |
最近记录: |