Suppose you have the following sql tables: Table "group" id: int8 name: varchar Table "group_member" id: int8 group_id: int8 member_user_id: int8 member_group_id: int8 The column member_group_id is filled when you have a group that is part of the group identified with group_id. Suppose you want to determine all groups that are part of a specific group. You need a recursive query for that: -- Met deze query willen we alle groepen bepalen die in onze -- groep zitten. -- Als een groep lid is van onze groep, dan zijn dat ook -- users die we moeten ophalen. -- we moeten dus de huidige groep en de groepen die lid -- zijn van onze groep bepalen. En dat recursief. with recursive groups AS ( select g.id as group_id, gm.member_group_id as member_group_id from "group" g -- welke groepen zijn members van de huidige groep? left outer join group_member gm on gm.group_id = g.id and gm.member_group_id is not null where g.id = specific_group_id -- union -- select g.id as group_id, gm.member_group_id as member_group_id from "group" g -- welke groepen zijn members van de huidige groep? left outer join group_member gm on gm.group_id = g.id and gm.member_group_id is not null -- we doen de query vanuit de member_group_id van het resultaat van de recursie inner join groups rg on rg.member_group_id = g.id ) select distinct(group_id) from groups;
zondag 29 december 2024
PostgreSQL: recursive query
Abonneren op:
Reacties posten (Atom)
Geen opmerkingen:
Een reactie posten