【问题标题】:How to annotate a query with column from a relation?如何使用关系中的列注释查询?
【发布时间】:2015-03-13 04:37:28
【问题描述】:

我有两个模型,Owner 和 Dog。狗属于主人,主人有很多狗。

我可以查询所有者并使用most_food_needed_for_pet(即Dog 的food_needed 列,最大lifespan)对其进行注释吗?我知道我可以通过多个查询来完成此操作,但我应该只使用Arel 进行一个查询。

我最初的尝试是

Owner.
  joins(:dogs).
  select(Dog.arel_table[:food_needed].as('most_food_needed_for_pet')).
  select(Dog.arel_table[:lifespan].maximum).
  group('dogs.owner_id')

但这错误地用最大lifespan 和数据库中第一个Dog 的food_needed 注释每个所有者,而不是最长寿命Dog。

【问题讨论】:

    标签: mysql sql ruby-on-rails arel


    【解决方案1】:
    d = Dog.arel_table
    o = Owner.arel_table
    Owner.
      select( o[Arel.star], d[:lifespan], d[:food_needed].as('most_food_needed_for_pet')).
      joins(:dogs).
      group(:owner_id).
      having( dogs: { lifespan: d[:lifespan].maximum } )
    

    [在字段重叠的情况下删除裸*]

    【讨论】:

    • 我运行了它,我得到了一个 Mysql2:error,检查你的语法 AS max_id。
    • 它生成的 SQL 是什么?
    猜你喜欢
    • 2016-09-22
    • 2011-03-23
    • 2020-11-14
    • 2021-06-24
    • 1970-01-01
    • 2011-05-26
    • 2017-09-10
    • 2020-07-31
    • 1970-01-01
    相关资源
    最近更新 更多