user228777
user228777

Reputation: 3094

Delete Parent record if child is not present

I am creating menu and submenus in a table variable. ( Typical parent child records in the same table) ParentID coll is null for all Top menus. And for their child ParentID will be the MenuId of these parent menus. ( Depending on what kind of user logs this is build ) Now what I have to do is if particular parent doesn't have any child I want to delete this parent recrod from this table variable.
I know I can to it with cursor or by row by row operation. Can I do it any other way?

Upvotes: 6

Views: 4477

Answers (3)

Jon Egerton
Jon Egerton

Reputation: 41569

A single statement like this should do it (as an alternative to using exists):

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

Upvotes: 4

Chris
Chris

Reputation: 23181

You could do something like this:

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

Upvotes: 1

Code Magician
Code Magician

Reputation: 24022

Without seeing your table structure it's difficult to tell you the exact query you would need but, if I understand your question correctly, you just need to do something like this:

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

This query does a correlated subquery to find all the menu records that don't have child records. It uses SQL's EXISTS clause

Upvotes: 4

Related Questions