读书人

初学SQL就是不知道如何弄了请问

发布时间: 2012-12-22 12:05:07 作者: rapoo

初学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
[其他解释]
看不懂,重新描述下。

读书人网 >SQL Server

热点推荐