没有重复数据的SQL遍历问题

时间:2013-11-11 07:07:07

标签: sql sql-server

我有一个菜单信息的数据表

Id  P_ID  Name
1   null  Main
2   1     menu1
3   1     meun2
4   1     menu3
5   2     menu1_1
6   5     menu1_1_1
7   3     menu2_1
8   4     menu3_1

当我得到身份证6,7 我怎样才能获得这样的数据

Id  P_ID  Name
1   null  Main
2   1     menu1
3   1     meun2
5   2     menu1_1
6   5     menu1_1_1
7   3     menu2_1

且没有重复数据

1 个答案:

答案 0 :(得分:2)

这会产生您的预期结果,假设您要查找的是您要搜索的行和所有父母,并希望排除任何兄弟姐妹:

declare @t table (ID int,P_ID int,Name varchar(20))
insert into @t(Id,P_ID,Name) values
(1,null,'Main'),
(2,1   ,'menu1'),
(3,1   ,'meun2'),
(4,1   ,'menu3'),
(5,2   ,'menu1_1'),
(6,5   ,'menu1_1_1'),
(7,3   ,'menu2_1'),
(8,4   ,'menu3_1')

declare @search table (ID int)
insert into @search (ID) values (6),(7)

;With AllParents as (
    select ID,P_ID,Name from @t where ID in (select ID from @search)
    union all
    select t.ID,t.P_ID,t.Name from @t t inner join AllParents ap on t.ID = ap.P_ID
)
select distinct * from AllParents