我有一个菜单信息的数据表
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
且没有重复数据
答案 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