• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

如何实现如下查询

yzty 2008-02-21 03:30:51
现有两个表,
1、Article_Category:CatgoryID,CategoryName,CategoryParentID
数据如下:
1,0,程序设计
2,1,C#
3,1,Delphi
4,2,C#语法介绍
5,2,C#功能介绍
6,0,新闻
2、Article:ArticleID,CategoryID,ArticleTitle,ArticleCreateDate
1,4,C#语法介绍二,2008-1-5
2,5,C#功能介绍,2008-1-4
3,6,新闻标题一,2008-1-3
4,4,C#语法介绍一,2008-1-2
其中Article.CategoryID=Article_Category.CategoryID,Aritlce_Category是递归数结构,从CategoryParentID=0开始递归CategoryID=CategoryParenID
如何根据Article.ArticleCreateDate进行排序查询出程序设计的所有子节点的内容
格式如下:
Article.ArticleID,Article_Category.CategoryID,Article_Category.CategoryName,Article.ArticleTitle,Article.ArticleCreateDate
1,4,C#语法介绍二,2008-1-5
2,5,C#功能介绍,2008-1-4
4,4,C#语法介绍一,2008-1-2
使用SQL语句,存储过程,函数都可以,只要能实现
...全文
64 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
pt1314917 2008-02-21
写反的两个字段。自己对照着换下就行了。。。
性能方面可以添加索引试试。。
回复
yzty 2008-02-21
多谢了,我上面写反了个地方,应该是Article_Category(CatgoryID int,CategoryParentID int,CategoryName varchar(50))
顺便想问一下,如果数据量很大的话,比如100万条,性能可以接受吗?如何只查询出前十条记录?
回复
pt1314917 2008-02-21



create table Article_Category(CatgoryID int,CategoryName int,CategoryParentID varchar(50))
insert into Article_Category select 1,0,'程序设计'
insert into Article_Category select 2,1,'C#'
insert into Article_Category select 3,1,'Delphi'
insert into Article_Category select 4,2,'C#语法介绍'
insert into Article_Category select 5,2,'C#功能介绍'
insert into Article_Category select 6,0,'新闻'


create table Article(ArticleID int,CatgoryID int,ArticleTitle varchar(50),ArticleCreateDate datetime)
insert into Article select 1,4,'C#语法介绍二','2008-1-5'
insert into Article select 2,5,'C#功能介绍','2008-1-4'
insert into Article select 3,6,'新闻标题一','2008-1-3'
insert into Article select 4,4,'C#语法介绍一','2008-1-2'


create function get(@CatgoryID int)
returns @t table(CatgoryID int,CategoryName int,CategoryParentID VARCHAR(50),Level int)
as
begin
declare @i int
set @i=1
insert into @t select CatgoryID,CategoryName,CategoryParentID,@i from Article_Category where CategoryName=1
while @@rowcount<>0
begin
set @i=@i + 1
insert into @t select a.CatgoryID,a.CategoryName,a.CategoryParentID,@i from Article_Category a,@t b
where a.CategoryName=b.CatgoryID and b.Level=@i-1
end
return
end


select articleid,a.CatgoryID,articletitle,ArticleCreateDate from (select * from dbo.get(1)) a,Article b
where a.CatgoryID=b.CatgoryID
回复
yzty 2008-02-21
格式化一下
现有两个表,
1、Article_Category:
CatgoryID,CategoryName,CategoryParentID
数据如下:
1 0 程序设计
2 1 C#
3 1 Delphi
4 2 C#语法介绍
5 2 C#功能介绍
6,0,新闻
2、Article:
ArticleID,CategoryID,ArticleTitle,ArticleCreateDate
1 4 C#语法介绍二 2008-1-5
2 5 C#功能介绍 2008-1-4
3 6 新闻标题一 2008-1-3
4 4 C#语法介绍一 2008-1-2
其中Article.CategoryID=Article_Category.CategoryID,Aritlce_Category是递归数结构,从CategoryParentID=0开始递归CategoryID=CategoryParenID
如何根据Article.ArticleCreateDate进行排序查询出程序设计(Article_Category.CatgoryID=1)的所有子节点的内容
格式如下:
Article.ArticleID,Article_Category.CategoryID,Article_Category.CategoryName,Article.ArticleTitle,Article.ArticleCreateDate
1 4 C#语法介绍 C#语法介绍二 2008-1-5
2 5 C#功能介绍 C#功能介绍 2008-1-4
4 4 C#语法介绍 C#语法介绍一 2008-1-2
使用SQL语句,存储过程,函数都可以,只要能实现
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-02-21 03:30
社区公告
暂无公告