I have a table in my database which stores a tree structure. Here are the relevant fields:
mytree (id, parentid, otherfields...)
I want to find all the leaf nodes (that is, any record whose id
is not another record's parentid
)
I've tried this:
SELECT * FROM mytree WHERE `id` NOT IN (SELECT DISTINCT `parentid` FROM `mytree`)
But that returned an empty set. Strangely, removing the "NOT" returns the set of all the non-leaf nodes.
Can anyone see where I'm going wrong?
Update: Thanks for the answers guys, they all have been correct and worked for me. I've accepted Daniel's since it also explains why my query didn't work (the NULL thing).