我需要SELECT FROM嵌套SELECT的帮助。
如何以ActiveRecord方式重写以下查询并获取Relation对象?
SELECT candidates.*
FROM (SELECT (candidates.first_name || ' ' || candidates.last_name) AS full_name, candidates.* FROM candidates) candidates
WHERE full_name = 'Anton Kolganov'
答案 0 :(得分:3)
为什么要连接而不是根据名字和姓氏进行选择?子选择的性能远低于直接查询。您可以使用select
范围获取全名(它可以像其他属性一样访问):
Candidate.select("candidates.*, (first_name || ' ' || last_name) AS full_name").
where(first_name: 'Antonov', last_name: 'Kolganov')
更新:如果您确实需要使用FROM
子句中的子选择重写上述查询到ActiveRecord,您可以执行以下操作:
Candidate.from("(SELECT (candidates.first_name || ' ' || candidates.last_name) AS full_name, candidates.* FROM candidates) candidates").
where(full_name: 'Anton Kolganov')
即,通常,您可以将任何有效的SQL放入ActiveRecord范围方法中,包括select
,from
等。
答案 1 :(得分:1)