如何在SQL中删除所有没有孩子的父母?

发布于 2024-08-21 10:37:20 字数 164 浏览 8 评论 0原文

我有一个表,其中包含 id、名称、级别(深度)和 parrent_id,有没有什么好方法可以删除没有任何子节点的所有节点? (在一个层面上就足够了)? 我知道我可以在应用程序中执行此操作 - 加载给定级别上的所有节点并检查它们是否有子节点(如果没有删除),但这在 SQL 中可能更有效,而且我不是 SQL 大师:)

I have a table that has id, name, level (the depth) and parrent_id, is there any nice way to remove all nodes without any children? (On one level suffices)?
I know I can do it in application - load all the nodes on given level and the check if they have children, if not remove, but this whould probably be more effective in SQL and I'm not SQL guru :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

英雄似剑 2024-08-28 10:37:20

你可以尝试

SELECT  DISTINCT tParent.*
FROM    Table tParent LEFT JOIN
        Table tChild ON tParent.ID = tChild.ParentID
WHERE   tChild.ID IS NOT NULL

更好的是尝试

SELECT  *
FROM    Table t
WHERE   NOT EXISTS(SELECT 1 FROM Table WHERE ParentID = t.ID)

You could try

SELECT  DISTINCT tParent.*
FROM    Table tParent LEFT JOIN
        Table tChild ON tParent.ID = tChild.ParentID
WHERE   tChild.ID IS NOT NULL

Even better would be to try

SELECT  *
FROM    Table t
WHERE   NOT EXISTS(SELECT 1 FROM Table WHERE ParentID = t.ID)
紧拥背影 2024-08-28 10:37:20
SELECT * FROM mytable where id in (SELECT parent_id from mytable)

这应该可以完成工作

SELECT * FROM mytable where id in (SELECT parent_id from mytable)

This should do the job

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文