Recursividade em SQL  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
spranta
JavaEvangelist
[Avatar]

Membro desde: 19/01/2004 17:32:48
Mensagens: 305
Localização: Belo Horizonte
Offline

Pessoal, estou com um problema que talvez vcs consiguam me ajudar. É o seguinte, tenho uma tabela de estrutura organizacional de uma instituição, desta forma ela tem um campo que aponto para a chave primaria da propria tabela, isto é para indicar qual o pai do registro ou seja, eu tem o item presidente, como ele nao é subordinado a ninguem entao o campo item_pai do registro 'presidente' é nulo, afinal ele é o unico sem subordinação, já os outros items da estrutura organizacional sempre são subordinados a alguem e desta forma o diretor de tecnologia por exemplo seria um subordinado direto do presidente e por isso no seu campo item_pai teriamos o codigo (chave primaria) do item 'presidente'. Espero que tenham entendido o contexto, mas o problema é que eu preciso atraves de uma expressão SQL buscar todos os items subordinados a determinado item, mas nao só os filhos, como também os netos e bisnetos, ou seja, toda a arvore abaixo daquele nó.
O select abaixo me retorna todos os filhos de um determinado item, agora por favor me digam como retornar toda a sua decendencia.

SELECT E.NOM_ITEM_ESTR as NOME, EO.SIG_ITEM_ESTR as PAI
FROM ESTRUTURA_ORGANIZACIONAL E, ESTRUTURA_ORGANIZACIONAL EO
WHERE E.COD_ITEM_PAI = EO.COD_ITEM_ESTR
AND EO.SIG_ITEM_ESTR = 'Sigla do pai'

Espero que tenham entendido e possam me ajudar o mais rapido possivel
Obrigado

"Não somos apenas ignorantes. Somos ignorantes sobre o quão ignorantes somos."
(Charles Darwin)
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Que SQL você está usando? Se for Oracle existe uma cláusula especial só para isso, chamada CONNECT BY. (Leia uns artigos da revista Oracle Magazine em http://www.oracle.com/technology/oramag/oracle/05-may/o35asktom.html )
[WWW]
raguiar
JavaBaby
[Avatar]

Membro desde: 04/03/2004 15:31:01
Mensagens: 83
Localização: Niterói - RJ
Offline

Assim nao funciona ?


Grato,

Ricardo Aguiar
[Email]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Em MS SQL Server você pode ver este post.

http://www.dbnewsgroups.net/group/microsoft.public.sqlserver.programming/topic485.aspx
[WWW]
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

Esse tipo de estrutura não tem como ser recuperada com algebra relacional extendida (SQL). Ou você usa vários selects, ou usa algum mecanismo não relacional (connect by do oracle, p.e.), ou escreve uma stored procedure, ou puxa tudo e filtra na aplicação.

No caso particular de você conhecer a altura da árvore organizacional, é possivel escrever um select mega-ultra-retardado com uma tonelada de junções externas e pegar todos dados de uma só vez.

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
rafaelfernandes
Smalltalk

Membro desde: 03/03/2008 16:03:30
Mensagens: 1
Offline

pessoal... eu tive vendo os codigo aqui desse topico... e tive uma duvida..


pra fazer ligações entre as tabelas vocês preferem usar o WHERE ou INNER JOIN?



valeu
Nope
Thread.start()

Membro desde: 06/07/2007 11:31:34
Mensagens: 40
Offline

Eu prefiro inner join. Acho mais organizado.
E não é a mesma coisa as duas formas, se não me engano o otimizadordos bancos tratam de maneira diferente.
rafaelviny
JavaEvangelist
[Avatar]

Membro desde: 04/08/2008 12:51:39
Mensagens: 478
Localização: Cascavel Pr
Offline

eu prefiro o " inner join "

pelo q eu sei parece q da mais performace em bancos grandes

Rafael Vinicius.
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team