1
我使用SQL 2005,与数以百万计的记录现有数据(所以数据结构不能改变),我试图做到以下几点:充分利用自参照表分层数据在SQL 2005
我在自引用表中有一些数据(下面的示例来自另一个问题,并进行了一些修改以显示我试图实现的内容)。我需要拔出结果的树格式如下:
Parent
Child1 of Parent
Child1 of Child 1
Child2 of Child 1
Child2 of Parent
Child1 of Child 2
我的实际数据变为9级深 - 我试图让使用CTE的结果。然而,这将产生以下:
Parent
Child1 of Parent
Child2 of Parent
Child1 of Child 1
Child2 of Child 1
Child1 of Child 2
这里是我使用的排序查询的一个例子:
create table workshop (
w_id smallint primary key,
p_id smallint,
s_date smalldatetime,
title varchar(100))
go
alter table workshop add constraint fk_wkshp foreign key (p_id)
references workshop(w_id)
go
insert into workshop (w_id, p_id, s_date, title) values (1, null,
'5/2/2007', 'Parent')
insert into workshop (w_id, p_id, s_date, title) values (2, 1,
'5/3/2007', 'Child 1 of the parent')
insert into workshop (w_id, p_id, s_date, title) values (3, 1,
'5/5/2007', 'Child 2 of the parent')
insert into workshop (w_id, p_id, s_date, title) values (4, 2,
'5/4/2007', 'Child of Child 1')
insert into workshop (w_id, p_id, s_date, title) values (5, 2,
'5/5/2007', 'Child 2 of the child of the parent')
insert into workshop (w_id, p_id, s_date, title) values (6, 3,
'5/7/2007', 'Child of the child 2')
insert into workshop (w_id, p_id, s_date, title) values (7, null,
'5/7/2007', '2nd Parent')
insert into workshop (w_id, p_id, s_date, title) values (8, 7,
'5/7/2007', 'Child of 2nd Parent')
insert into workshop (w_id, p_id, s_date, title) values (9, 7,
'5/7/2007', 'Child of 2nd Parent')
go
declare @id smallint
set @id = 1
;with events (w_id, p_id, s_date, title)
as
(
-- the anchor member
select
w_id, p_id, s_date, title
from
workshop
where w_id = @id
-- the recursive member
union all
select
w.w_id, w.p_id, w.s_date, w.title
from
workshop w
-- the key is to join to the CTE
join events e on e.w_id = w.p_id
)
select * from events
drop table workshop
go
我已经看到了关于这个其他各种问题,但不能看到的答案,我问题。 nearset的东西是oracle'通过事先连接',如果我使用的是oracle dB,那将会很棒!有任何想法吗?
干杯, 杰森
我认为这是同一个问题http://stackoverflow.com/questions/539155/ordering-hierarchy-from-recursive-query-results-in-sql-2005是相同的问题。 – gjvdkamp 2011-03-31 10:03:47
是的,你是对的 - 感谢这个评论我找到了我的答案(下面!) – Jay 2011-03-31 11:52:20