Как получть данные из отношения по условию?
Есть 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)