fundo
Isso é para a construção de algumas visualizações que usaremos para gerar relatórios.
Eu tenho uma tabela de locais, os campos principais sendo "local" e "pai" .
A estrutura que esses dois campos criam, em nível de nível, segue as linhas de Nome da Empresa -> Nome do Campus -> Nome do Edifício -> Nome do Piso -> Nome da Sala. O nome da empresa permanece o mesmo e o nome do campus permanece o mesmo neste caso.
A estrutura dos locais geralmente se parece com isso:
+-----------+
| Org. Name |
+-----+-----+
|
+-----v-----+
+--------------------+|Campus Name|+---+--+-------------+
| +--+--------+ | |
| | | |
| | | |
+--+-----+ +------+-+ +--+----+ +---+---+
+--+| BLDG-01|+--+ | BLDG-02| |BLDG-03| |Grounds|
| +--------+ | +--------+ +-------+ +-------+
+-+------+ +-----+--+
|Floor-01| |Basement+-------+
+-+------+ +--------+ |
| |
| |
| +----------+ +-------+--+
+-+Room 1-001| |Room B-002|
+----------+ +----------+
Todo local é vinculado ao local principal, que é o nome da organização. Atualmente, existe apenas uma organização e um campus.
Metas
- Eu gostaria de poder consultar todos os locais abaixo de qualquer local no nível "Edifício". Isso é para que eu possa retornar coisas como quantas ordens de trabalho foram executadas para qualquer local dentro de um determinado edifício.
- Eu gostaria de poder determinar qual sub-localização pertence a qual edifício . Essencialmente o contrário; Eu gostaria de ir de qualquer nível abaixo do nível do edifício e rastrear até o que é o edifício.
- Eu gostaria que isso fosse visto . Isso significa que eu gostaria de ter uma tabela que, para cada item no nível "edifício", liste o edifício na coluna da esquerda e todos os locais possíveis SOB esse edifício na coluna da direita. Dessa forma, eu teria uma lista que eu poderia consultar a qualquer momento para descobrir quais locais fazem parte de qual edifício.
Tentativas e fazer certo
Tentei fazer isso através de visões horrivelmente construídas, consultas UNION etc. - que pareciam uma péssima idéia. Eu sei que a Oracle possui um mecanismo para isso através de "CONNECT BY"; Só não tenho certeza de como usá-lo.
NULL
para eles? Como você identifica um "nível de construção"?Respostas:
FrusteratedWithFormsDesigner tem a direção certa (+1). Aqui está o que eu acho que você está procurando especificamente.
A visão realiza todos os três objetivos. Você pode consultá-lo em busca de um edifício para encontrar tudo o que ele contém e em um sub-local para encontrar em qual edifício ele está.
Se você não quiser contar o próprio edifício como um dos sub-locais, poderá agrupar a consulta existente em um deles para eliminar as entradas nas quais o edifício e a sublocação são iguais.
fonte
CONNECT BY
é a maneira correta de lidar com dados naturalmente recursivos.Não sei como é a sua mesa, mas talvez algo como:
Isso deve obter nós em "BLDG-01".
A
START WITH
cláusula é seu caso base.Outra explicação (além da Oracle, que suponho que você já leu e teve problemas, provavelmente é muito concisa):
http://www.adp-gmbh.ch/ora/sql/connect_by.html
Além disso:
http://psoug.org/reference/connectby.html
E:
http://www.oradev.com/connect_by.jsp
fonte
Não sei se entendi completamente sua pergunta, mas talvez algo assim:
Isso mostrará a hierarquia para cada local
fonte