tło
Jest to konstrukcja niektórych widoków, których będziemy używać do raportowania.
Mam tabelę lokalizacji, a kluczowymi polami są „lokalizacja” i „rodzic” .
Struktura, którą te dwa pola tworzą, pod względem poziomu, jest zgodna z nazwą firmy -> nazwa kampusu -> nazwa budynku -> nazwa piętra -> nazwa pokoju. Nazwa firmy pozostaje taka sama, a nazwa kampusu pozostaje taka sama w tym przypadku.
Struktura lokalizacji ogólnie wygląda następująco:
+-----------+
| Org. Name |
+-----+-----+
|
+-----v-----+
+--------------------+|Campus Name|+---+--+-------------+
| +--+--------+ | |
| | | |
| | | |
+--+-----+ +------+-+ +--+----+ +---+---+
+--+| BLDG-01|+--+ | BLDG-02| |BLDG-03| |Grounds|
| +--------+ | +--------+ +-------+ +-------+
+-+------+ +-----+--+
|Floor-01| |Basement+-------+
+-+------+ +--------+ |
| |
| |
| +----------+ +-------+--+
+-+Room 1-001| |Room B-002|
+----------+ +----------+
Każda lokalizacja prowadzi z powrotem do swojej lokalizacji nadrzędnej, która ostatecznie jest nazwą organizacji. Obecnie istnieje tylko jedna organizacja i jeden kampus.
Cele
- Chciałbym móc sprawdzać wszystkie lokalizacje poniżej dowolnej lokalizacji na poziomie „Budynku”. Dzięki temu mogę zwrócić rzeczy, takie jak liczbę zleceń wykonanych dla dowolnej lokalizacji w danym budynku.
- Chciałbym być w stanie określić, która podstacja należy do którego budynku . Zasadniczo odwrotnie; Chciałbym przejść z dowolnego poziomu poniżej poziomu budynku i prześledzić z powrotem do tego, czym jest budynek.
- Chciałbym, żeby to było w zasięgu wzroku . Oznacza to, że chciałbym mieć tabelę, która dla każdego elementu na poziomie „budynku” zawiera listę budynku w lewej kolumnie i wszystkie możliwe lokalizacje POD tym budynkiem w prawej kolumnie. W ten sposób miałbym listę, którą mogłem w dowolnym momencie przeszukać, aby ustalić, które lokalizacje są częścią danego budynku.
Próby i robienie tego dobrze
Próbowałem to zrobić poprzez okropnie skonstruowane widoki, zapytania UNION itp. - które wydawały się złym pomysłem. Wiem, że Oracle posiada do tego mechanizm poprzez „CONNECT BY”; Po prostu nie jestem pewien, jak to wykorzystać.
NULL
dla nich rodzicem ? Jak rozpoznać „poziom budynku”?