Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果子记录不存在,则删除父记录_Sql_Sql Server - Fatal编程技术网

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

Sql 如果子记录不存在,则删除父记录,sql,sql-server,Sql,Sql Server,我正在表格变量中创建菜单和子菜单。(同一表格中的典型父子记录) 对于所有顶级菜单,ParentID coll为空。对于它们的子菜单,ParentID将是这些父菜单的MenuId。(取决于生成的用户日志类型) 现在我要做的是,如果某个父级没有任何子级,我想从该表变量中删除该父级重新创建。 我知道我可以通过光标或逐行操作来访问它。我可以用其他方法吗?您可以这样做: delete from yourtable yt where not exists (select * from yourtable y

我正在表格变量中创建菜单和子菜单。(同一表格中的典型父子记录) 对于所有顶级菜单,ParentID coll为空。对于它们的子菜单,ParentID将是这些父菜单的MenuId。(取决于生成的用户日志类型) 现在我要做的是,如果某个父级没有任何子级,我想从该表变量中删除该父级重新创建。

我知道我可以通过光标或逐行操作来访问它。我可以用其他方法吗?

您可以这样做:

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的替代方法):


您希望在删除子项时将此操作作为维护作业(即一次)还是常规操作?