Как создать хранимую процедуру для выборки через запросы из одной таблицы в БД Postgresql

Есть таблица следующего типа:

Id |        Name        | ... |  ParentId
........................................
1  |        США         | ... |    NULL
2  |       Россия       | ... |    NULL
3  |     штат Айдахо    | ... |     1
4  |     штат Айова     | ... |     1
5  | Московская область | ... |     2
6  |  Тверская область  | ... |     2
7  |       Тверь        | ... |     6
8  |       Ржев         | ... |     6
...и т.д...
........................................

Стоит 2 задачи:

  1. Получить список всех объектов, относящихся к 'родителю'.
  2. Получить количество вложенных объектов для полученного списка.

Для решения данных задач было принято решение использовать хранимую процедуру.

С первой задачей проблем нет и всё решается одним простым запросом в хранимой процедуре (пример для получения объектов России):

BEGIN

return query

Select 
tn."Id" as id,
tn."Name" as name,
tn."ParentId" as parent_id

From public."TableName" as tn

Where ParentId = 2;

End;

Запрос вернёт Тверскую и Московскую области.

С первой задачей справился, но возникают проблемы со второй. Нужно выполнить здесь же второй запрос, чтобы узнать, сколько у полученных выше объектов есть своих (зависимых) объектов.

Т.е., ответ должен быть таким:

Id |        Name        | ... |  ParentId  |  Count
....................................................
5  | Московская область | ... |     2      |    0
6  |  Тверская область  | ... |     2      |    2
....................................................

Пытался самостоятельно решить данную задачу с помощью Join'ов, но знаний не хватает. Слышал про рекурсивные запросы. Думаю, возможно с их помощью можно решить мою проблему. Буду благодарен за любую помощь и наводки.


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