web-dev-qa-db-ja.com

Rails Activerecord Relation:サブクエリをSQLselectステートメントのテーブルとして使用

誰かがRails(私はRails 4)Activerecordメソッドを使用しています)Activerecordメソッドを使用して次のSQLを作成する方法を理解するのを手伝ってもらえますか?私はあなたがこれを行うことができることを知っていますfind_by_sqlですが、アクティブレコードの関係を保持したいと思います。作成しようとしているpostGreSQLデータベースのSQLは次のとおりです。

SELECT * FROM 
(SELECT DISTINCT ON(table_a.id) table_a.name as alias_a, table_b.id, table_b.time
FROM table_1
LEFT OUTER JOIN table_b ON table_a.id = table_b.id
ORDER BY table_a.id, table_b.time asc) AS subquery
ORDER BY alias_a asc

私のサブクエリには、次のものがあります(上記のサブクエリのSQLを生成します):

@subquery = table_a.select("DISTINCT ON(table_a.id) table_a.name as alias_a, table_b.time")     
@subquery = @subquery.joins("LEFT OUTER JOIN table_b ON table_a.id = table_b.id")
@subquery = @subquery.order("table_a.id, table_b.time asc")

しかし、外部のselectステートメントのテーブルとして@subqueryを使用するselectステートメントを作成する方法がわかりません。

12
Vee

ActiveRecordインターフェースからfrom()メソッドを使用します。

例えば:

@subquery = table_a.select("DISTINCT ON(table_a.id) table_a.name as alias_a, table_b.time")     
@subquery = @subquery.joins("LEFT OUTER JOIN table_b ON table_a.id = table_b.id")
@subquery = @subquery.order("table_a.id, table_b.time asc")

次に、外部クエリで次のように使用します。

@query = OtherModel.from("(#{@subquery.to_sql}) table_name, other_model_table, etc ...").where(:field => table_name.alias_a) ...etc.
17
leethax88