Question : Find bottom level of an SQL Tree

I have an SQL table used to store a heirarchial tree - each record has an id (icostcentre_id) and a parent (icostcentre_parentid).  The parent points to the immediate parent costcentre OR IS null if this is a top level cost centre.  As such it is easy to find top level cost centres using a query of

SELECT icostcentre_id WHERE icostcentre_parentid IS NULL

and pretty easy to traverse the tree using a simple WHERE icostcentre_parentid = value statement.

My problem is that I want to identify those records which have no children - that is the cost centres at the bottom of the tree.  I did try :-

SELECT icostcentre_id FROM icostcentre
   WHERE icostcentre_id NOT IN (SELECT DISTINCT(icostcentre_parentid) FROM icostcentre)

thinking that this would return all records whose ID was not referenced by any children but this returned no records - I assume there is a problem because I am comparing icostcentre_id with icostcentre_parentid???

Please can you suggest a way of quickly identifying those records which have no children?

Answer : Find bottom level of an SQL Tree

SELECT i1.icostcentre_id
FROM icostcentre i1
left outer join icostcentre i2 on i1.icostcentre_id= i2.icostcentre_parentid
   WHERE i2.icostcentre_parentid is null
Random Solutions  
 
programming4us programming4us