【问题标题】:ActiveRecord: Clever Join and IncludeActiveRecord:聪明的加入和包含
【发布时间】:2009-09-24 15:50:05
【问题描述】:

我正在尝试让 ActiveRecord 执行以下查询:

SELECT A.*, B.*, C.* FROM A INNER JOIN B ON B.ID = B_ID INNER JOIN C ON C.ID = C_ID

数据集相当大,我需要最好的性能,因此这个特定的查询。

我的模型和查询如下:

class A < ActiveRecord::Base
  belongs_to :b
  belongs_to :c
end

A.find :all, :include => [:b, :c], :joins => [:b, :c]

但是,这会导致执行以下查询:

SELECT A FROM A INNER JOIN B ON B.ID = B_ID INNER JOIN C ON C.ID = C_ID
SELECT * FROM B WHERE ID IN (...)
SELECT * FROM C WHERE ID IN (...)

有什么方法可以让 ActiveRecord 更聪明,而不是执行后两个查询?

\

【问题讨论】:

    标签: sql ruby activerecord join


    【解决方案1】:

    这只是一个假设。但我不明白为什么需要定义 :include 和 :joins。 只有 :joins 足以进行查询并可能解决您的问题。

    【讨论】:

    • 感谢您的回复。不幸的是,如果我删除 :include 它不会执行急切加载,这是必需的。
    猜你喜欢
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多