2011-11-17 15 views
5

Sto creando menu e sottomenu in una variabile di tabella. (Record figlio genitore tipico nella stessa tabella) ParentID coll è nullo per tutti i menu principali. E per loro figlio ParentID sarà il MenuId di questi menu genitori. (A seconda del tipo di registri utente che questo è stato creato) Ora quello che devo fare è se un particolare genitore non ha un figlio Voglio cancellare questo riproduttore genitore da questa variabile di tabella.
So che posso farlo con il cursore o operazione riga per riga. Posso farlo in altro modo?Elimina record padre se figlio non presente

+0

Vuoi fare questo come un lavoro di manutenzione (vale a dire una volta), o come evento normale, ogni volta che un bambino viene cancellato? – Oded

risposta

3

Senza vedere la vostra struttura della tabella è difficile dire la query esatto si avrebbe bisogno, ma, se ho capito bene la tua domanda, non vi resta che fare qualcosa di simile this:

DELETE T 
FROM MyTable T 
WHERE NOT EXISTS(SELECT * FROM MyTable WHERE ParentID = T.MenuID) 
    AND T.ParentID IS NULL 

Questa query esegue una sottoquery correlata per trovare tutti i record di menu che non hanno record figlio. Esso utilizza EXISTS clausola di SQL

1

Si potrebbe fare qualcosa di simile:

delete from yourtable yt where not exists (select * from yourtable yt2 where yt.id = yt2.parentid) and yt.parentid is null 
4

Una singola istruzione come questo dovrebbe farlo (come alternativa all'utilizzo esiste):

delete p 
from 
    tblMenu p 
    left join tblMenu c on p.ID = c.ParentID 
where 
    p.ParentID is null --Ensures that the item to delete is at the top 
    and c.ParentID is null --Finds top level items with no children 
Problemi correlati