mysql - 如何使用关系中的列注释查询?

标签 mysql sql ruby-on-rails arel

我有两个模型,OwnerDog。狗属于主人,主人有很多狗。

我可以查询 Owners 并用 most_food_needed_for_pet 注释它们吗,它是 Dogfood_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')

但这错误地用数据库中第一只 Dog 的最大 lifespanfood_needed 而非最长寿的来注释每个所有者

最佳答案

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 } )

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

关于mysql - 如何使用关系中的列注释查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29024952/

相关文章:

sql - Microsoft Access - 导航表单导致我的查询无法工作

ruby-on-rails - 生产 Rails 部署中的两个版本的 gem

ruby-on-rails - 在 ActiveMerchant 中测试 Paypal Express

ruby-on-rails - Rails 中的分组和计数

php - 如何查明网站是在什么框架或什么语言上创建的?

sql - 如何从按不同项目分组的结果集中计算最大(列)行

python - 从多个 uWSGI worker 查询 MySQL 返回不匹配的行

php - 如何创建具有动态列数的表 MYSQL

php - 如何使用 ORDER BY 并比较 2 列以上

mysql - 如何在 SELECT 查询中将两个 bool 列合并为一个 varchar 列?