Trouver les nœuds feuilles de l'arbre hiérarchique

J'ai une table dans ma base de données qui stocke une arborescence. Voici les domaines concernés:

mytree (id, parentid, otherfields...)

Je veux trouver tous les nœuds feuilles (qui est, à tout enregistrement dont id n'est pas d'un autre enregistrement parentid)

J'ai essayé ceci:

SELECT * FROM mytree WHERE `id` NOT IN (SELECT DISTINCT `parentid` FROM `mytree`)

Mais qui a renvoyé un ensemble vide. Étrangement, le retrait du "NON" renvoie à l'ensemble de tous les nœuds non feuille.

N'importe qui peut voir où je vais mal?

Mise à jour: Merci pour les réponses les gars, ils ont tous été correct et a travaillé pour moi. J'ai accepté de Daniel, car il explique aussi pourquoi ma requête ne fonctionne pas (le NUL de la chose).

C'est vraiment de loin préférable d'utiliser la syntaxe de jointure suggéré par opposition à une sous-requête.
En fait, non. Tout mi-décent SGBDR permettra d'optimiser l'un dans l'autre, si nécessaire. La meilleure pratique consiste à utiliser quelle que soit la forme exprime votre intention le plus clairement. Dans ce cas, que la forme est presque sans aucun doute une sous-requête.

OriginalL'auteur nickf | 2008-10-15