sql >> Database >  >> RDS >> PostgreSQL

Rails alle gebruikers in een groep met geslacht mannelijk

Ik denk dat je al die groeps-ID's kunt krijgen van de gebruikersgroepen waarvan het geslacht van de gebruiker female is en gebruik ze met een NOT IN clausule, om al die groepen uit te filteren die overeenkomen met die id's:

with users(id, gender) as (values (1, 'male'), (2, 'female')),
     groups(id, name) as (values (1, '1st'), (2, '2nd')),
     user_groups(id, user_id, group_id) as (values (1, 1, 1), (2, 2, 1), (3, 2, 1))
select *
from groups g
where g.id not in (
    select ug.group_id
    from user_groups ug
    inner join users u on u.id = ug.user_id
    where u.gender = 'female'
)

De ActiveRecord-versie kan er als volgt uitzien:

Group.where.not(
  id: UserGroup.joins(:user)
               .where(users: { gender: 'female' })
               .select(:group_id)
)



  1. MySQL veel-op-veel relatie met FOREIGN KEYS

  2. mysql hiërarchie self-join, haal alle subcategorieën op

  3. MySQL UPDATE met willekeurig getal tussen 1-3

  4. PL/SQL-procedure - te veel waarden