2014-05-06 12 views
9

Biorąc pod uwagę sytuację, jak: Company has_many UsersSzyny zapytania grupa/mający/Ilość

aby uzyskać firmy, które mają 3 użytkowników, to działa sprawnie:

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

Ale co jest najbardziej skuteczny sposób, aby uzyskać Firmy, które mają 0 użytkowników (brak)? Bo, oczywiście, to samo podejście nie działa (jak joins z definicji wyklucza spółek z 0 użytkowników):

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

Odpowiedz

8

Czy LEFT JOIN zamiast INNER JOIN.

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

Myślę, że można to uprościć, używając opcji "zawiera" zamiast "połączeń". Podobnie jak: Company.includes (: users) .group ("companies.id"). Posiadające ("COUNT (users.id) = 0") – miguelfg

Powiązane problemy