2010-02-12 4 views
1

J'ai une table qui a l'ID, le nom, le niveau (la profondeur) et le parrent_id, est-il un bon moyen de supprimer tous les nœuds sans enfants? (Sur un seul niveau suffit)? Je sais que je peux le faire dans l'application - charger tous les nœuds sur un niveau donné et vérifier s'ils ont des enfants, sinon supprimer, mais ce serait probablement plus efficace en SQL et je ne suis pas gourou SQL :)Comment supprimer tous les parrents sans enfants dans SQL?

Répondre

3

Vous pouvez essayer

SELECT DISTINCT tParent.* 
FROM Table tParent LEFT JOIN 
     Table tChild ON tParent.ID = tChild.ParentID 
WHERE tChild.ID IS NOT NULL 

serait encore mieux d'essayer

SELECT * 
FROM Table t 
WHERE NOT EXISTS(SELECT 1 FROM Table WHERE ParentID = t.ID) 
+0

La question est de supprimer ceux qui n'ont pas d'enfants – anthares

+0

OK, désolé, je vois ce que vous meen. Devrait changer à * N'EST PAS NULL * –

+1

Exactement, je me suis trompé la première fois, aussi :) – anthares

2
SELECT * FROM mytable where id in (SELECT parent_id from mytable) 

Cela devrait faire le travail

Questions connexes