出于某种原因,我收到错误:
PG::UndefinedColumn: ERROR: column "full_name" does not exist
对于以下查询:
User.select("first_name || ' ' || last_name as full_name").where("full_name = ?", "Jon Snow")
哪个转换为sql查询:
SELECT first_name || ' ' || last_name as full_name FROM \"users\" WHERE (full_name = 'Jon Snow')
我的目的是能够通过用户查询全名,但我不想将其拆分,因为这是在更大的查询中使用的。
我尝试过使用/不使用users
,first_name
或last_name
周围的表名(full_name
)的多种变体,并尝试添加/删除来自不同地点的引号/括号。我发现,如果我在没有where
的情况下进行查询,然后检查full_name
是什么,它实际上会正确收集它。 Concat
似乎也会产生同样的错误。
如果我将concat
移到where
调用中,它似乎可以正常工作,而不是命名它:
User.where("CONCAT(first_name, ' ', last_name) = ?", "Jon Snow")
SQL:
"SELECT \"users\".* FROM \"users\" WHERE (CONCAT(first_name, ' ', last_name) = 'Jon Snow')
它似乎不像使用命名变量那么方便,但也许你不能这样做。
答案 0 :(得分:1)
如果要引用SELECT
子句中WHERE
子句中的别名,则需要使用FROM
中的子查询,例如
SELECT *
FROM (
SELECT
*,
concat(first_name, ' ', last_name) AS full_name
FROM some_table
WHERE ...otherpredicates...
) x
WHERE full_name = 'Jim Bob';