Это очень актуально для вопроса SQL-запрос для получения полного пути иерархии .
Единственное отличие состоит в том, что моя иерархия содержит разные типы сущностей из разных таблиц, например:
- Проект
- Фаза
- Папка
- Документ
Я хочу выбрать все документы вместе с их полными путями (от уровня проекта до уровня папки).Фазы и папки могут иметь подфазы и папки.
Я ужасен в SQL и просто не могу понять, как адаптировать ответ к связанному вопросу в соответствии с моими потребностями.
Модель данных и пример данных
DECLARE @Project TABLE (ID INTEGER, Name VARCHAR(32))
DECLARE @Phase TABLE (ID INTEGER, Project_ID INTEGER, Parent_Phase_ID INTEGER, Name VARCHAR(32))
DECLARE @Folder TABLE (ID INTEGER, Phase_ID INTEGER, Parent_Folder_ID INTEGER, Name VARCHAR(32))
DECLARE @Document TABLE (ID INTEGER, Folder_ID INTEGER, Name VARCHAR(32))
INSERT INTO @Project VALUES (1, 'MyProject')
INSERT INTO @Phase
SELECT 1, 1, 0, 'MyPhase1'
UNION ALL SELECT 2, 1, 1, 'MyPhase1_1'
UNION ALL SELECT 3, 1, 0, 'MyPhase2'
INSERT INTO @Folder
SELECT 1, 1, 0, 'MyFolder'
UNION ALL SELECT 2, 1, 1, 'MySubFolder'
UNION ALL SELECT 3, 1, 0, 'AnotherFolder'
INSERT INTO @Document
SELECT 1, 2, 'MyDocument'
UNION ALL SELECT 2, 3, 'AnotherDocument'
Пример
MyProject1 ................ Project
- MyPhase1 ................ Phase
- MyPhase1_1 ............ Phase
- MyFolder ............ Folder
- MySubfolder ....... Folder
- MyDocument ...... Document
- AnotherFolder ....... Folder
- AnotherDocument ... Document
- MyPhase2 ................ Phase
Идеальные результаты запроса в этом случае:
Document | Path
MyDocument | MyProject1/MyPhase1/MyPhase1_1/MyFolder/MySubfolder
AnotherDocument | MyProject1/MyPhase1/MyPhase1_1/AnotherFolder