Hierarquia com auto-relacionamento

27/12/2005

0

Tenho uma tabela hierárquica de órgãos(departamentos) com os campos idOrgao,SiglaOrgao,NomeOrgao e CodOrgaoPai, formando um auto-relacionamento entre o CodOrgaoPai e o idOrgao. Preciso fazer uma view que me retorne toda a descendência inferior de um órgão x, por exemplo: retornar o id de todos os órgãos abaixo do órgão de idOrgao=222 (Filhos, netos, bisnetos, tataranetos, tatatatatatatatatatatatataranetos e etc de 222).

Socorrooooooo!!!

Grato,
CADU


Cadusantos

Cadusantos

Responder

Posts

06/01/2006

Wcrivelini

o problema é o seguinte: isso fica fácil de fazer quando se trata de uma hierarquia balanceada com número pré-definido de níveis ou um número máximo de níveis que vc irá definir.

digamos que a hierarquia terá no máximo 5 níveis (quatro níveis acima do original) .

SELECT
A.NomeOrgao AS NIVEL 0,
B.NomeOrgao AS NIVEL 1,
C.NomeOrgao AS NIVEL 2,
D.NomeOrgao AS NIVEL 3,
E.NomeOrgao AS NIVEL 4
FROM TABELA AS A
LEFT JOIN TABELA AS B ON A.CodOrgaoPai = B.idOrgao
LEFT JOIN TABELA AS C ON B.CodOrgaoPai = C.idOrgao
LEFT JOIN TABELA AS D ON C.CodOrgaoPai = D.idOrgao
LEFT JOIN TABELA AS E ON D.CodOrgaoPai = E.idOrgao
WHERE A.idOrgao NOT IN (SELECT CodOrgaoPai FROM TABELA)


este WHERE garante q vc vai começar a lista a partir dos orgãos que não são pais, ou seja, o nível de maior detalhe.
o LEFT JOIN garante que o registro não será perdido caso ele não tenha todos os níveis hierárquicos. mesmo assim, este SELECT pode mostrar um mesmo orgão em vários níveis diferentes se a hierarquia não for balanceada.


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar