如果孩子不在,则删除父记录

时间:2011-11-17 15:01:33

标签: sql sql-server

我在表变量中创建菜单和子菜单。 (典型的父子记录在同一个表中) 所有顶级菜单的ParentID coll均为空。对于他们的孩子,ParentID将是这些父菜单的MenuId。 (取决于这是构建的用户日志类型) 现在我要做的是,如果特定的父母没有任何孩子,我想从这个表变量中删除这个父级recrod 我知道我可以用光标或逐行操作。我能以其他方式做到吗?

3 个答案:

答案 0 :(得分:4)

像这样的单个语句应该这样做(作为使用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

答案 1 :(得分:3)

如果没有看到你的表结构,很难告诉你你需要的确切查询,但如果我理解你的问题,你只需要做这样的事情:

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

此查询执行相关子查询以查找没有子记录的所有菜单记录。它使用SQL的EXISTS子句

答案 2 :(得分:1)

你可以这样做:

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