如何在SQL中搜索子节点


How to search children nodes in SQL

假设我有一个名为Tags的表,它有一个id columnm-name列和一个parent_id列。许多标记使用parent_id列嵌套。我该如何有效地检查标签A是否将标签B作为非直接子项。

以前,我选择了所有具有当前标记的parent_id的标记,然后得到结果,并对任何子元素重复。

我该如何更有效地获取与搜索匹配的所有标签,并且这些标签是直接或非直接子标签。

谢谢你的帮助,Jason

与其在评论中讨论。。。以下是我的建议:

  • 如果你想坚持使用MySQL,但可以处理数据库的结构,那么Bill Karwin建议的"闭包表"模式绝对是可行的。它允许您将数据保持在平面表设计中,同时将多级树结构抽象到一个单独的表中,以便轻松提取数据。

  • 如果你想尝试不同的关系数据库系统,那么你可以尝试微软免费提供的SQL Server Express。在完全公开的情况下,我不使用它,所以我不知道排除了什么功能(我确信有些功能是不可用的,否则你不会免费获得它)。因此,请进行一些研究,以确保Recursive Common Table ExpressionsCTEs)可用。如果是这样,那么您可以使用Pinal Dave的博客文章来了解使用CTE的递归SQL技术。

  • 否则,如果你只认为你只能使用几个级别,你可以使用最初的建议并对级别的数量进行硬编码。