表结构如下:
product表
id name categoryid
1 体育信息 1
2 文娱信息 2
3 健康信息 3
4 足球信息 4
5 蓝球信息 5
6 明星信息 6
7 趣事信息 7
8 保健信息 8
9 足球世界杯信息 9
category表
categoryid categoryname parentid
1 体育 0
2 文娱 0
3 健康 0
4 足球 1
5 蓝球 1
6 明星 2
7 趣事 2
8 保健 3
9 足球世界杯 4
现在的select下拉框如下显示 :
*************************
体育
--足球
--足球世界杯
--蓝球
文娱
--明星
--趣事
健康
--保健
*************************
如果我选择 "体育 ",希望捞到记录1,4,5,9
如果我选择 "足球 ",希望捞到记录4,9
如果我选择 "足球世界杯 ",希望捞到记录9
也就是选取大类时要把子类中的记录也捞出来。。
请问怎么写SQL才会更合适。。因为我写的速度太慢
------解决方案--------------------
写个函数返回所有子类
create function fn_allsub(
@categoryid int
)
returns @r table (categoryid int,categoryname varchar(30),parentid int)
as
begin
insert @r select * from category where [email protected]
while exists (select 1 from category where parentid in (select categoryid from @r) and categoryid not in (select categoryid from @r))
insert @r select * from category where parentid in (select categoryid from @r) and categoryid not in (select categoryid from @r)
return
end
go
--查询
select a.* from product a,dbo.fn_allsub(1) b