【问题标题】:Rails 3: Inner join with associationsRails 3:与关联的内部联接
【发布时间】:2011-05-20 17:28:37
【问题描述】:

我有点卡在 Active Record 查询问题上。我想对查询进行左连接而不是内连接,但 joins 方法的结果只返回内连接。

Entry.
  joins(:measurements => :measurement_type).
  sum(:value, :conditions => ['name = ?','Calories'])

棘手的部分是:measurements 与名称列所在的:measurement_type 具有belongs_to 关系。

目前,这仅针对拥有 food_posts 的用户返回总和。目标是返回所有用户的总和。没有食物帖子的用户总和为零。

我试过谷歌搜索和搜索这里的其他帖子,但没有找到答案。有什么建议吗?

我还在开发环境中使用 SQLite,在生产环境中使用 Postgresql。

【问题讨论】:

    标签: ruby-on-rails activerecord left-join


    【解决方案1】:

    如果您想进行左连接而不是内连接,则需要使用自定义“sql 片段”

    在你的例子中,

    relation.joins("left join measurements on measurements.id = measurement_type.measurements_id")
    

    或类似的东西取决于您的设置。

    tutorial 总结得很清楚。

    【讨论】:

    • 谢谢!看起来我对附加关联的查询比您的示例更长,这就是我一直坚持的。它可能更简洁,但这是我最终得到的:relation.joins("LEFT JOIN measurements ON measurements.entry_id = entries.id").joins("INNER JOIN measurement_types ON measurement_types.id = measurements.measurement_type_id")
    • 我也很怀疑。从您的原始帖子中,我对您的数据库架构并不是 100% 清楚。附:如果问题解决了您的问题,请不要忘记接受:)
    【解决方案2】:

    MetaWhere gem 支持外连接,还有很多其他优点:

    https://github.com/ernie/meta_where

    【讨论】:

    猜你喜欢
    • 2012-07-19
    • 2014-01-18
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    相关资源
    最近更新 更多