TSQL - 在select中循环?

rya*_*ins 9 t-sql sql-server while-loop sql-server-2008

在SQL服务器中

好吧,所以我正在使用一个数据库表,其中行可以有父行,然后可以拥有自己的父行.我需要选择根'row'.我不知道这样做的最好方法.

有一个名为ParentId的字段,它将行链接到具有该ID的行.当ParentId = 0时,它是根行.

这是我的查询:

SELECT Releases.Name,WorkLog.WorkLogId 

FROM WorkLog,Releases
WHERE
Releases.ReleaseId = WorkLog.ReleaseId
and WorkLogDateTime >= @StartDate
and WorkLogDateTime <= @end
Run Code Online (Sandbox Code Playgroud)

我真的不需要子版本的版本名称,我只想要根版本名称,所以我想选择这样的While循环的结果:

WHILE (ParentReleaseId != 0)
BEGIN
@ReleaseId = ParentReleaseId
END

Select Release.Name
where Release.RealeaseId = @ReleaseId
Run Code Online (Sandbox Code Playgroud)

我知道语法很糟糕,但希望我能告诉你我想要实现的目标.

And*_*ttó 9

这是一个例子,可能有用:

此查询获取树的较低元素,并搜索父节点的父节点.就像我在我的表中有4级 - >类别7-> 5,5-> 3,3-> 1.如果我给它5它会找到1,因为这是三个中的最高级别.

(更改最后一个选择,你可以让所有的父母都在路上.)

DECLARE @ID int

SET @ID = 5;

WITH CTE_Table_1
(
  ID,
  Name,
  ParentID
)
AS(
  SELECT 
   ID,
   Name,
   ParentID
  FROM Table_1
  WHERE ID = @ID

 UNION ALL

 SELECT 
  T.ID,
  T.Name,
  T.ParentID
 FROM Table_1 T
 INNER JOIN CTE_Table_1 ON CTE_Table_1.ParentID = T.ID
)

SELECT * FROM CTE_Table_1 WHERE ParentID = 0
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,如果有人想测试它,这里是一个sqlFiddle:http://www.sqlfiddle.com/#!3/add1f2/5(有效于2012年8月24日) (2认同)