我有以下两列的表。SQL父级子递归查询 - 包括亲属亲属
Parent Child
A C
A D
B A
B E
C H
J C
F G
G I
所以我需要在A的父通过,我应该得到以下背全一的家长和孩子也是所有家长和孩子关联到(父亲或母亲的那些或孩子)我需要他们所有的父母和孩子,等等。
所以在一个被传递给PROC我会得到的例子如下
A C
A D
B A
B E
C H
J C
若F获得通过,我只想得到
F G
G I
我有以下两列的表。SQL父级子递归查询 - 包括亲属亲属
Parent Child
A C
A D
B A
B E
C H
J C
F G
G I
所以我需要在A的父通过,我应该得到以下背全一的家长和孩子也是所有家长和孩子关联到(父亲或母亲的那些或孩子)我需要他们所有的父母和孩子,等等。
所以在一个被传递给PROC我会得到的例子如下
A C
A D
B A
B E
C H
J C
若F获得通过,我只想得到
F G
G I
select * from test
where parent in (
select parent from test
where parent = 'F' or child = 'F'
union
select child from test
where child = 'F' or parent = 'F')
or child in (
select parent from test
where parent = 'F' or child = 'F'
union
select child from test
where child = 'F' or parent = 'F');
我不认为这将处理深递归。 – johnjps111
谢谢约翰尼,你为什么这么想? – MicroMan
试试这个,这是类似于评论中给出的链接,但是同时考虑了父母和孩子的递归。希望它能为你工作。
WITH relationships AS (
SELECT *
FROM Table
WHERE Child = 'A'
UNION ALL
SELECT p.*
FROM Table p
JOIN relationships pa on pa.Child = p.Parent
UNION ALL
SELECT c.*
FROM Table c
JOIN relationships ch on ch.Parent = c.Child
)
select *
from name_tree;
[SQL递归函数,得到一个项目的所有祖先(可能重复http://stackoverflow.com/questions/16749095/sql-recursive-function-that-gets-all-ancestors-of-一个项目) – rutter