需要表中的所有数据

时间:2013-04-18 01:07:49

标签: sql sql-server tsql

请帮忙。

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

2 个答案:

答案 0 :(得分: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 Fiddle Demo

顺便说一句 - 这导致A,B,C,D和F - 而不是E.我认为这是你帖子中的拼写错误。

答案 1 :(得分:0)

select distinct(e.ParentName) from Employee e left join Employee e1 
on  e.employeeId=e1.ParentID