给出下表
catName catID parentID
=================================
vehicles 1 0
cars 2 1
sedans 3 2
animals 4 0
cows 5 4
给定一个catID
,我需要找到其顶级父级(parentID = 0
)。
每天执行50-100次此查询。当前有100-200行(将来可能会更多)。多达8个层次的深度。我在考虑三种选择:
topParentID
(最不满意)哪个效率最高?
SQL2008 +:
为了存储层次结构,SQL Server包含HIERARCHYID数据类型。可以将上述数据“转换为”以使用HIERARCHYID
“值”:
catName catID parentID hierarchyNode
=============================================
vehicles 1 0 /1/
cars 2 1 /1/2/
sedans 3 2 /1/2/3/
animals 4 0 /4/
cows 5 4 /4/5/
转换后,我将删除parentID
列。
HIERARCHYID是SQLCLR系统数据类型,其中包括以下方法:
为了获得父节点,我将使用以下方法:
DECLARE @node HIERARCHYID
SET @node = '/1/2/3/'
SELECT
currentNodeLvl= @node.GetLevel(), --> 3
parentAsHID = @node.GetAncestor(@node.GetLevel() - 1), --> 0x58
parentAsString= @node.GetAncestor(@node.GetLevel() - 1).ToString()--> /1/
此外,我将在hierarchyNode
列上创建索引,因此:
CREATE UNIQUE INDEX IUN_Table_hierarchyNode
ON dbo.Table(hierarchyNode)
最后的查询将是:
SELECT ..., prt.catID AS parentID
FROM dbo.Table crt -- Curent node
LEFT/INNER JOIN -- It depends on hierarchyID nullability
dbo.MyTable prt -- Parent node
ON @node.GetAncestor(crt.hierarchyID.GetLevel() - 1).ToString() = prt.hierarchyID
问题内容: 我有以下两个表 表人 表关系层次结构 这将形成树状结构 ParentId和ChildId是人员表的ID列的外键 我需要编写可以获取顶级父级(即每个人的根源)的SQL。 遵循CTE可以针对每个用户执行此操作。我将其转换为一个功能,并为Person的每一行运行了它。我在Person表中大约有3k行,大约需要10秒。任何人都可以建议一种可以减少花费的方法。问题是CTE运行3k次后运行的功能
我有 2 个实体(父实体和子实体),它们之间具有一对多关系。 “父项具有子项列表”,“子项具有父项”字段。 孩子有 在父字段中。 家长有 在子列表中。 我想找到一种方法,用另一个家长替换一个孩子的家长。(即将子女A的父母从父母A变更为父母B) 因为我想遵循父列表,所以我想从列表中删除子项。问题是,即使我首先将ChildA添加到ParentB的列表中,也要将ChildA的Parent字段设置为Par
我希望在BST中找到具有特定值的节点的父节点。我的节点类具有左右属性项(即值/键)。 查找父级的想法是这样的: 1)如果值(key)不存在,则返回无,无 2)如果根等于值(key),则返回无,根 3)否则查找值(key)并返回(par, node),其中par是父级和节点 我的函数是这样的: 当 为“无”时,如何处理该问题?
我有一个Java8中的多线程Http服务器,它每秒获得数千个请求,并且必须创建需要字符串连接的响应。这个问题最好(最快)的解决方案是什么? 我知道,通常比操作符具有更好的性能,我认为StringBuilder将是最好的解决方案,但在这种情况下,我必须为每个请求初始化新的StringBuilder。 而且,在我的问题中,串联总是需要3个字符串-其中两个是final字符串,中间一个是变量。该变量可以从
我在为分配从头创建的优先级队列类中有一个remove方法。我创建的优先级队列保存在一个数组中,索引从0开始。我跟踪等于数组长度的大小。remove方法使用名为的助手方法: 其中parent是数组中存储父元素的位置,我希望返回其最小的子元素。顺序就是每个非叶子节点的子节点数。我发现最小的代码: 它目前是我创建的PriorityQueue类的数组越界异常完整实现: Main包括我测试代码的3种不同方式
最有效的方法是只使用纯javascript查找特定父元素的子元素(带有类或ID)。没有jQuery或其他框架。 在这种情况下,我需要找到parent的child1或child2,假设DOM树中可以有多个child1或child2类元素。我只想要父母的元素