求一SQL语句------关于多级目录查询的
类别表:Category {CateID,Name,ParentID} 其中ParentID指向本类别的直接父类的CateID,
新闻表:News {NewID,title,body,CateID} CateID指向本新闻所属的分类CateID;
现在知道1个类别的CateID,想要找到属于该类别及子类别所有新闻的NewID,但是并不清楚类别是分几级的,要求子类的子类的子类的......子类都包含
------解决方案--------------------麻烦你能不能把你建的所有表都说出来啊~~~
还是说就这两个表?
------解决方案--------------------用程序读,如果你的CAT_ID有规则就好办了,
如:
1级:CATID=01;
二级:CATID=0101;
三级:CATID=010101;
------解决方案--------------------用程序是相当之困难啊,也可能我的知识不足啊,反正我是想不出用一个SQL就能实现这样的结果。
建议楼主还是在程序中用一个递归函数来实现吧。程序量也不大啊。
------解决方案--------------------LZ试试用子查询来做啊~~~
只是分类查询的话用SQL的子查询语句应该没问题吧?
我觉得应该不难吧?
是不是我想的太简单了?
------解决方案----------------------这个函数用于返回指定cateId及其所有子cateId
create function dbo.get_self_and_sub_items
(
@cateId int
)
returns @t table(cateId int, [level] int)
as
begin
declare @i int
set @i = 0
insert into @t select @cateId, 0
while @@rowcount > 0
begin
set @i = @i + 1
insert into @t
select a.cateId, @i
from category a, @t b
where a.parentId = b.cateId and b.[level] = @i -1
end
return
end
go
--查询属于指定类别及其所有子类别的NewID
select a.[newId]
from news a
inner join
(
select cateId
from dbo.get_self_and_sub_items(这里传入已知的cateId)
) b
on a.cateId = b.cateId