Sql-Server-2012
層次數據:從層次結構中獲取所有節點,包括與 where 不匹配的父節點
我有一個類似於這種結構的表:
TaskId: int PK AssignedTo: varchar(50) ParentTaskId: int FK nullable
ParentTaskId 引用TaskId。
表中的數據與此類似:
TaskId | AssignedTo | ParentTaskId 1 Jim NULL 2 Jim 1 3 Joe 2 4 John NULL ...
我的問題的癥結在於:我需要在表中查詢分配給 Joe 的所有任務(這將返回 TaskId 3),但我還需要顯示找到的任務的層次結構,因此我需要返回 Tasks 1、2 , 和上表中的 3 個。
我不知道如何通過一個查詢或多個查詢從 SQL 中提取這些數據。
請幫忙!使用 SQL Server 2012。
CREATE TABLE
對於以後的文章,最好提供INSERT
如下聲明:create table tasks (TaskId int not null primary key ,AssignedTo char(5) not null ,ParentTaskId int references tasks (taskid)); insert into tasks (TaskId, AssignedTo, ParentTaskId) values (1, 'Jim', NULL); insert into tasks (TaskId, AssignedTo, ParentTaskId) values (2, 'Jim', 1); insert into tasks (TaskId, AssignedTo, ParentTaskId) values (3, 'Joe', 2); insert into tasks (TaskId, AssignedTo, ParentTaskId) values (4, 'John', NULL);
也就是說,您可以使用遞歸公用表表達式 (CTE),如下所示:
with tree (ancestortaskid) as ( select taskid from tasks where assignedto = 'Joe' union all select ParentTaskId from tree t join tasks s on t.ancestortaskid = s.taskid ) select t.ancestortaskid from tree;
我只有 sql-server2017 可以測試,但是 afaik,遞歸 cte 也應該在 2008 年可用