Mam tabelę z kolumną ścieżki w systemie. W mojej hierarchii ścieżka do etykiety jest unikalna, co oznacza, że każda etykieta ma dokładnie jedną etykietę nadrzędną. Innymi słowy, w tabeli nie ma dwóch ścieżek, które kończyłyby się tą samą etykietą.PostgreSQL ltree znajdź wszystkich przodków danej etykiety (bez ścieżki)
Mam etykietkę "ltree", powiedzmy "C".
mogę znaleźć wszystkie wiersze tego potomka etykieta z następującym zapytaniem:
select * from myTree where path ~ '*.C.*';
To działa prawidłowo i daje poprawne poddrzewa.
Teraz muszę zaimplementować zapytanie, aby znaleźć wszystkie wiersze nadrzędne tej etykiety. Chodzi mi o to, że jeśli w tabeli znajdują się na przykład 3 wiersze z etykietami "A", "AB", "ABC", chciałbym uzyskać wiersze ze ścieżkami "A" i "AB" (prawdopodobnie włącznie z "ABC", na razie nie ma znaczenia).
Jeśli znam pełną ścieżkę "C" ("A.B.C" w powyższym przykładzie), zadanie jest proste z operatorem @>
. Jednak teraz wiem tylko "C" i nadal chciałbym osiągnąć to zadanie za pomocą pojedynczego zapytania. Czy jest jakiś sposób to zrobić?
Nie znalazłem żadnego bezpośredniego wsparcia dla tego w 'ltree', ale możesz wybrać węzeł podrzędny z' path ~ '* .C'', a następnie możesz wykonać samołączenie, aby uzyskać wszystkie przodkowie. – pozs
Dzięki, też spróbuję. –
Skąd znasz "C", ale nie pełną ścieżkę "A.B.C"? Czy nie są w tym samym rzędzie stołu? –