Recursividade em SQL

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

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 )

Assim nao funciona ?

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 OR E.COD_ITEM_PAI IS NULL)

Em MS SQL Server você pode ver este post.

http://www.dbnewsgroups.net/group/microsoft.public.sqlserver.programming/topic485.aspx

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.

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

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.

eu prefiro o " inner join 8) "

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