gpt4 book ai didi

ruby-on-rails - PostgreSQL 虚拟列——列不存在?

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

使用 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_afield_bfield_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'
)

我的大脑出了问题——谁能帮我解决这个问题?

最佳答案

如果将“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

顺便说一句:您不需要表达式 boolean_field = 't'(如果它确实是 boolean 类型的列)。 AND boolean_field 就足够了,因为它是一个有效的 bool 表达式。

关于ruby-on-rails - PostgreSQL 虚拟列——列不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6608220/

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