Как получть данные из отношения по условию?

Есть 2 таблицы, апи роли и апи пермисии.

Cтруктура такая id, name

Они связаны много ко многим

Нужно получить все апи роли где присутствует персисия с определенным индексом, но если роль содержит такую пермиссию, то получить нужно эту роль, со всем ее пермиссиями.

Я пробовал например вот так, но возвращается конкретно одна строчка с этой пермиссией, а мне нужно что бы вернулась роль со всеми ее пермиссиями если она содержит пермиссию с id 390. Пробовал разными запросами и с вложенным, возвращается все ровно не все принадлежащие строчки из пермиссий

SELECT * FROM public.dict_api_roles dar
left join link_api_roles_permissions larp on larp."dictApiRolesId" = dar.id 
left join dict_api_permissions dap on dap.id = larp."dictApiPermissionsId"
where dap.id = 390

select * from public.dict_api_roles dar
left join link_api_roles_permissions larp on 
larp."dictApiRolesId" = dar.id 
left join dict_api_permissions dap on dap.id = 
larp."dictApiPermissionsId"
where dar.id in(
SELECT dar.id FROM public.dict_api_roles
where dap.id = 390
)

Ответы (1 шт):

Автор решения: Alexander Pavlov
with matched_roles as (
 SELECT larp."dictApiRolesId" as roleId 
 FROM link_api_roles_permissions larp 
 where larp."dictApiPermissionsId" = 390
)
select * 
 from public.dict_api_roles dar
 left join link_api_roles_permissions larp on larp."dictApiRolesId" = dar.id 
 left join dict_api_permissions dap on dap.id = larp."dictApiPermissionsId"
 where dar.id in( SELECT roleId from matched_roles)
→ Ссылка