请帮忙。
我有一张名为 Employee 的表。
我想要该表中的所有记录,并使用 parentid 自加入
记录就像
A 是父母
B 是 A 的孩子
C 是 A 的孩子
D 是 C
的孩子 F 是 B 的孩子
E 是父母
G 是 E 的孩子
H 是 G 的孩子
如果我把自我加入并把所有记录放在A是父母的地方,我只得到A,B,C而不是D和F
我想要 A 是父母的所有记录,例如 A,B,C,D,E 。
请帮忙。
我有一张名为 Employee 的表。
我想要该表中的所有记录,并使用 parentid 自加入
记录就像
A 是父母
B 是 A 的孩子
C 是 A 的孩子
D 是 C
的孩子 F 是 B 的孩子
E 是父母
G 是 E 的孩子
H 是 G 的孩子
如果我把自我加入并把所有记录放在A是父母的地方,我只得到A,B,C而不是D和F
我想要 A 是父母的所有记录,例如 A,B,C,D,E 。
如果没有设定数量的父/子级别,则需要为此使用递归 cte。假设您使用的是 SQL Server 2005 或更高版本,这应该是您正在寻找的:
with cte as (
select id,
id parentid
from employee
where parentid is null
union all
select e.id,
c.parentid
from employee e
join cte c on e.parentid = c.id
)
select id
from cte
where parentid = 'A'
顺便说一句——这会导致 A、B、C、D 和 F——而不是 E。我认为这是您帖子中的错字。
select distinct(e.ParentName) from Employee e left join Employee e1
on e.employeeId=e1.ParentID