Sql 如果子记录不存在,则删除父记录
我正在表格变量中创建菜单和子菜单。(同一表格中的典型父子记录) 对于所有顶级菜单,ParentID coll为空。对于它们的子菜单,ParentID将是这些父菜单的MenuId。(取决于生成的用户日志类型) 现在我要做的是,如果某个父级没有任何子级,我想从该表变量中删除该父级重新创建。Sql 如果子记录不存在,则删除父记录,sql,sql-server,Sql,Sql Server,我正在表格变量中创建菜单和子菜单。(同一表格中的典型父子记录) 对于所有顶级菜单,ParentID coll为空。对于它们的子菜单,ParentID将是这些父菜单的MenuId。(取决于生成的用户日志类型) 现在我要做的是,如果某个父级没有任何子级,我想从该表变量中删除该父级重新创建。 我知道我可以通过光标或逐行操作来访问它。我可以用其他方法吗?您可以这样做: delete from yourtable yt where not exists (select * from yourtable y
我知道我可以通过光标或逐行操作来访问它。我可以用其他方法吗?您可以这样做:
delete from yourtable yt where not exists (select * from yourtable yt2 where yt.id = yt2.parentid) and yt.parentid is null
DELETE T
FROM MyTable T
WHERE NOT EXISTS(SELECT * FROM MyTable WHERE ParentID = T.MenuID)
AND T.ParentID IS NULL
在没有看到表结构的情况下,很难告诉您需要的确切查询,但是,如果我正确理解了您的问题,您只需要执行以下操作:
delete from yourtable yt where not exists (select * from yourtable yt2 where yt.id = yt2.parentid) and yt.parentid is null
DELETE T
FROM MyTable T
WHERE NOT EXISTS(SELECT * FROM MyTable WHERE ParentID = T.MenuID)
AND T.ParentID IS NULL
此查询执行相关子查询,以查找没有子记录的所有菜单记录。它使用SQL的子句像这样的一条语句就可以做到这一点(作为使用exists的替代方法):
您希望在删除子项时将此操作作为维护作业(即一次)还是常规操作?