日期:2014-05-17  浏览次数:20473 次

初学SQL就是不知道怎么弄了,请教
如例子

id   name     typeid  pantid
1    蔬菜水果   0      -1
2    蔬菜       0       1
3    西红柿     0       2
4    小黄瓜     1       2
5    大黄瓜     0       2
6    烂黄瓜     1       2
7    水果       0       1
8    葡萄       1       7
9    鸭梨       0       7
10   苹果       1       7
11    桃        0       7

蔬菜或者水果的下一级节点只能是typeid=1的
结果
ID    name     typeid
2     蔬菜      0
4    小黄瓜     1       
6    烂黄瓜     1  
7    水果       0
10   苹果       1    


请教
------最佳解决方案--------------------
select * from tb 
where name in ('蔬菜','水果')
or  
(pantid in (select  typeid from tb where name in ('蔬菜','水果')) and typeid=1)

------其他解决方案--------------------
按楼主需求,葡萄也应该显示出来。
用2楼SSP的代码即可。
------其他解决方案--------------------

select id,name typeid from tb where pantid=1 and typeid=1 ;

------其他解决方案--------------------
2楼的和6楼的都正确,貌似6楼得简单2楼的全面
------其他解决方案--------------------
select ID,name,typeid
from tb
where pantid in (2,7) and typeid=1

貌似描述和结果不符
------其他解决方案--------------------
;with cte as
(
   select id  ,name,    typeid from tb where pantid=1
   union all
   select a.id,a.name,a.typeid from tb a join cte b on a.pantid=b.id
         where a.typeid=1
)

select * from cte
------其他解决方案--------------------
看不懂,重新描述下。