ActiveRecord的join操作添加到having子句的解决方法如下所示:
假设有两个表格users
和orders
,users
表格有一个name
列,orders
表格有一个user_id
列和一个total
列。我们想要通过ActiveRecord的join操作找到购买总金额大于100的用户。
class User < ApplicationRecord
has_many :orders
end
class Order < ApplicationRecord
belongs_to :user
end
我们可以使用ActiveRecord的join操作和having子句来实现:
User.joins(:orders).group('users.id').having('SUM(orders.total) > ?', 100)
这个查询会生成以下SQL语句:
SELECT "users".* FROM "users"
INNER JOIN "orders" ON "orders"."user_id" = "users"."id"
GROUP BY users.id
HAVING SUM(orders.total) > 100
这样我们就可以找到购买总金额大于100的用户列表了。