SQL:查找hierarchyid的最低共同祖先

Posted

技术标签:

【中文标题】SQL:查找hierarchyid的最低共同祖先【英文标题】:SQL: Finding the Lowest Common Ancestor of hierarchyids 【发布时间】:2012-06-20 12:53:08 【问题描述】:

我有一个数据集,其中包含(除其他外)值 hierarchyids 和 Parent-hierarchyids。 对于另一个查询,我需要hierarchyids 的最低共同祖先,因为我对sql 和特别是hierarchyids 相当陌生。

ID          HID         ParentHID
1           0x5CB280    0x5CA0
2           0x5CABBB08  0x5CABBA
3           0x5CB270    0x5CA0

【问题讨论】:

最低的共同祖先是什么?请提供您的要求和数据集的示例:您是否有两个字段,一个是 id,一个是记录的父 id? 做了一些修改,希望现在更容易理解 是 Microsoft SQL 吗?如果是,我有一个显示答案的文档链接,但如果我不确定您使用的 SQL Server,我不想发布它! :) 哇,是的,它的 Microsoft SQL。如果您能提供链接,我将不胜感激 好吧,我不会将其作为答案发布,因为它需要解决,但这是技术链接:technet.microsoft.com/en-us/library/bb677173.aspx 这描述了主要的hierarchyid API 以及如何使用 DLL 查找 LCA在 C# 中。我正在尝试找到一些准备就绪且简单的东西,如果可以的话,我会发布答案,敬请期待! :D 【参考方案1】:

假设您的层次结构没有严重平衡偏斜(例如列表),获取祖先链很便宜。接下来,你要做的就是取两条祖先链,做集合交集,然后找到一个最长的层次结构id。

【讨论】:

以上是关于SQL:查找hierarchyid的最低共同祖先的主要内容,如果未能解决你的问题,请参考以下文章

使用递归js查找树状对象(不是二叉树)的最低共同祖先

java 二叉树的最低共同祖先

在有向无环图中找到最低共同祖先的算法?

java 236.二进制Tree.java的最低共同祖先

java 236.二进制Tree.java的最低共同祖先

找到两个Tree节点的最低共同祖先,而不参考root?