在Rails ActiveRecord范围内使用子查询的SQL查询

时间:2015-08-13 13:40:17

标签: sql ruby-on-rails activerecord subquery

我想以rails方式写这个查询。

my_param是范围

的变量
select A.id, A.name, B.id
from table1 A 
  join table1_table2 AB on A.id = AB.table1_id
  join table2 B on B.id = AB.table2_id
where my_param in (select AB2.table2_id 
        from table1_table2 AB2
        where AB2.table1_id = A.id)

我试过这种方式(我已经加入并且在范围内需要where子句):

scope :by_my_param, ->(my_param) { where my_param => Table1Table2.select(:table2_id).where(table1_id: ...) if my_param.present? }

但我不知道如何引用当前id(A.id)

范围在表1中。

编辑: 我有通过关联has_many和控制器我用这种方式使用范围:

Table1.includes(:table2s).by_my_param(param[:my_param])

1 个答案:

答案 0 :(得分:0)

您应该使用包含进行热切加载关联: http://guides.rubyonrails.org/active_record_querying.html#eager-loading-multiple-associations

您需要做类似的事情:

table1.includes(:table1_table2).where( my_param: table1_table2: { table1_id: ... } )