sql - 如果 child 不存在,则删除父记录

标签 sql sql-server

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

最佳答案

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

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

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

关于sql - 如果 child 不存在,则删除父记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8169310/

相关文章:

c# - 如何从 C# 中加载的 SSIS 包捕获事件?

c# - 如何在 C# 中将 t-sql 的 "tinyint"转换为整数?

sql - 复制父、子和孙记录

sql - 如何仅在不存在时插入

sql-server - 从完整路径解析文件名和路径

sql - 从 SQL 脚本在 nvarchar 或 varchar 中插入控制字符?

mysql - SQL 中的矩阵连接?

sql - Postgresql 从包含数组的表中选择与数组中一样多的行

python - 在 sqlite3 中引用(外键)表的一列通过连接其他两个表中的两列

sql - 通过电子邮件链接恢复密码的数据库表