0

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

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

当我得到 id 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

并且没有重复数据

4

1 回答 1

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
于 2013-11-11T07:39:14.140 回答