1

请帮忙。

我有一张名为 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 。

4

2 回答 2

3

如果没有设定数量的父/子级别,则需要为此使用递归 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'

SQL 小提琴演示

顺便说一句——这会导致 A、B、C、D 和 F——而不是 E。我认为这是您帖子中的错字。

于 2013-04-18T01:27:12.310 回答
0
select distinct(e.ParentName) from Employee e left join Employee e1 
on  e.employeeId=e1.ParentID
于 2013-04-18T01:55:23.397 回答