Struktura drzewiasta, pobrać foldery wg kryteriów ale tylko najwyższego poziomu

0

Mam w bazie strukturę drzewiastą. Dla lepszego zoobrazowania przyjmijmy że są to foldery. Czyli każdy rekord ma Id i ParentId. "Root" ma parentId = null.
W kolejnej tabeli mam Id niektórych folderów (mniejsza o przeznaczenie), można powiedzieć że są to te wybrane wg jakiś kryteriów z tematu postu. Niemniej mogę mieć tam Id jakiegoś folderu i folderu będącego w jego poddrzewie:
A
|- A1
| |-A11
| |-A12
| |- A121
|- A2
Czyli w tej dodatkowej tabeli mam A1 i A121.

Chcę wybrać Id folderów z dodatkowej tabeli, tylko najwyższego poziomu, czyli w tym przypadku tylko A1. A121 jest w poddrzewie A1, czyli pomijamy go.

Nie mam żadnych tabel/kolumn wspomagających strukturę drzewiastę. Czyli nie mam info o głębokości folderu od root itp.

Nie przychodzi mi do głowy żadne zgrabne rozwiązanie. Bo niezgrabne tak :)

0

Moje niezgrabne rozwiązanie póki co:

do CTE wrzucam ścieżkę do root dla każdego folderu z tabeli X (tej dodatkowej), czyli:
Id | parent
A1, A
A121, A12
A121, A1
A121, A

Teraz inner join z samą sobą po left.parent = right.id, czyli zostanie
A121, A1 | A1, A
Ineresuje mnie id z lewej, czyli A121, wiem że muszę pominąć te kerordy z CTE, zgrupować po id i zostanie A1

0

jak chcesz tylko najwyższego to daj warunek where parentid = (select id from ... where parent_id is null)

0

Tzn. z tym najwyższego poziomu źle się trochę wyraziłem. Nie chodzi o te które mają parentId = null, tylko w dodatkowej tabeli mam id różnych folderów w szczególności jakiegoś folderu mającego rodzica (lub nawet dłuższą ścieżkę do root) oraz jakieś id folderów z jego poddrzewa (nie koniecznie są to jego bezpośrednie dzieci).

A
B
C
D
E
W dodatkowej tabeli jest B i E. Czyli mnie interesuje tylko B, bo E jest w jego poddrzewie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1