Rails组/有/计数查询

问题描述 投票:0回答:2

给定这样的情况:

Company
has_many
Users

要获得拥有 3 个用户的公司,此方法有效:

Company.joins(:users).group("companies.id").having("COUNT(users.id)=3")

但是获得拥有 0 个用户(无)的公司的最有效方法是什么?因为,显然,同样的方法行不通(因为

joins
根据定义不包括拥有 0 用户的公司):

Company.joins(:users).group("companies.id").having("COUNT(users.id)=0")
sql ruby-on-rails activerecord
2个回答
13
投票

执行 LEFT JOIN 而不是 INNER JOIN。

Company.joins('LEFT OUTER JOIN users ON companies.id = users.company_id')

0
投票

随着 Rails 的不断发展,现在也可以在没有显式 SQL 的情况下进行表述。
此外,使用外部联接和 null user.id 上的 where 可以更轻松地搜索没有用户的公司:

Company.left_outer_joins(:users).where(users: {id: nil})
© www.soinside.com 2019 - 2024. All rights reserved.