2011-11-17 9 views
5

Tworzę menu i podmenu w zmiennej tabeli. (Typowe nadrzędne rekordy podrzędne w tej samej tabeli) ParentID coll ma wartość null dla wszystkich górnych menu. I dla ich dzieci ParentID będzie menuId tych rodzicielskich menu. (W zależności od tego, jaki rodzaj logów użytkownika jest tworzony) Teraz, co muszę zrobić, to jeśli dany rodzic nie ma żadnego dziecka Chcę usunąć ten nadrzędny element recrod z tej tabeli.
Wiem, że mogę to zrobić za pomocą kursora lub operacji wiersz po wierszu. Czy mogę to zrobić w jakikolwiek inny sposób?Usuń rekord rodzica, jeśli dziecko nie jest obecne

+0

Chcesz zrobić to jako zadanie konserwacji (tzn raz), lub jako regularne występowanie, gdy dziecko zostanie usunięte? – Oded

Odpowiedz

3

Nie widząc swoją strukturę tabeli trudno powiedzieć dokładnie zapytanie będzie trzeba, ale jeśli dobrze rozumiem pytanie, po prostu trzeba coś zrobić jak to:

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

To zapytanie wykonuje skorelowane podzapytanie, aby znaleźć wszystkie rekordy menu, które nie mają rekordów podrzędnych. Używa SQL za EXISTS klauzuli

1

Można zrobić coś takiego:

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

Pojedyncza instrukcja jak to powinno zrobić to (jak istnieje alternatywa do stosowania):

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 
Powiązane problemy