2011-11-17 108 views
5

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

+0

你想这样做,因为维护作业(即一次),或作为经常发生,每当一个孩子被删除? – Oded

回答

3

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

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

该查询执行相关子查询来查找所有没有子记录的菜单记录。它使用SQL的EXISTS条款

1

你可以做这样的事情:

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

(如使用替代存在)像这样的单个语句应该这样做:

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