Hola Lista Recientemente tuve que actualizar unos campos de una tabla recursiva pero únicamente de los registros hijos (u hojas como también se denominan): osea de aquellos registros que no tengan 'hijos', realice el siguiente ejemplo para ilustrar como saque los hijos pero tengo la duda si había alguna otra forma de hacerlo. Que opinas ustedes?
with base as ( select * from (values (1,'nivel_0',null), (2,'nivel_1a',1), (4,'nivel_2a',2), (8,'nivel_3a',4), (10,'hijo_41a',8), (12,'hijo_42a',8), (6,'hijo_2b',2), (3,'nivel_1b',1), (5,'nivel_2b',3), (7,'hijo_3b',5) ) as a(id,nombre,idpadre) ) , base1 as ( WITH RECURSIVE t(idpadre,id,path,nivel) AS ( SELECT a.id,a.id,a.nombre::text, 1 FROM base as a WHERE a.idpadre is null UNION ALL SELECT a.idpadre,a.id,t.path || '@'|| a.nombre, t.nivel+1 FROM base as a join t on a.idpadre=t.id ) SELECT * FROM t ), base2 as ( select a.id,a.path,b.path as hijos from base1 as a left join base1 as b on b.path like '%' || a.path || '%' and length(b.path )> length(a.path ) ) select a.id,a.path from base2 as a where a.hijos is null -- Cordialmente, Ing. Hellmuth I. Vargas S. Esp. Telemática y Negocios por Internet EnterpriseDB Certified PostgreSQL 9.3 Associate