我正在使用Rails代码,该代码根据has_many关系返回左外连接:
@results = MyModel.where(:model_id => 123).includes(:foos).all
MyModel有这种关系:
has_many :foos, :as => :fooed, :conditions => 'foo_number IS NOT NULL', :order => "foo_number asc", :dependent => :destroy
这将创建一个Left Outer Join,它选择父表(MyModel)中的所有列和子表(foos)中的所有列。
如何选择子连接中为此连接选择的列?我可以列出要选择的列,或者要忽略的列,只要结果查询不包含具有大量数据的特别大的列。在这种情况下,在连接后过滤它不是一个选项。
理想情况下,我希望结果仍然是左外连接,而不是执行许多SQL查询。
我试过了:
@results = MyModel.where(:model_id => 123).includes(:foos).select("childcol1, childcol2").all
但这根本不会改变生成的查询。
答案 0 :(得分:0)
您可以这样做:
@results = MyModel.select('my.model.*, foos.childcol1, foos.childcol2').
where(:model_id => 123).
includes(:foos).
references(:foos)