假设我有一张这样的table:
id Parentid childid
--------------------------------
01 null 02
02 01 03
03 02 04
04 03 06
05 051 101
06 04 055
假设我总是被赋予一个中间值,这样一个同时有子节点和父节点的节点,此时我不知道它们是什么。e、 我的身份证号码是4。我已经编写了一个递归查询,它可以同时获取父记录和子记录,但是我不确定它是否是正确的方法,也不确定它是否是最快的方法。
with x as (
--These are the anchor (the parents)
select *
from table with (nolock)
where id= 04
),
parents as (
SELECT *
FROM x
UNION ALL
SELECT p.*
FROM parents JOIN
table p
ON parents.ID = p.childid
),
children as (
SELECT top 1 *
FROM x
UNION ALL
SELECT p.*
FROM children JOIN
table p
parents.id = p.parentid
)
SELECT distinct *
FROM parents
UNION
SELECT distinct *
FROM children;
这是如何工作,我希望结果回来,所以将返回id:01,02,03,04,06,因为他们要么是父或子的id 04等。
从本质上说,我想了解的是,递归查询获取给定记录的父项和子项的最佳方法是什么,在哪里查找子项必须使用1列,获取父项必须使用另一列,等等。
1条答案
按热度按时间nuypyhwy1#
这是伪sql术语,但是您只需要2个cte,而且不需要
DISTINCT
得到你想要的东西。横切层次数据,不使用hierachyid
数据类型永远不会像它可能的那样有效,因为您需要递归。不管怎样,你只需要: