【发布时间】:2012-08-20 01:19:16
【问题描述】:
在 SQL 服务器中
好的,所以我正在使用一个数据库表,其中行可以有父行,然后可以有自己的父行。我需要选择根“行”。我不知道最好的方法。
有一个名为 ParentId 的字段,它将行链接到具有该 ID 的行。 ParentId = 0时为根行。
这是我现在的查询:
SELECT Releases.Name,WorkLog.WorkLogId
FROM WorkLog,Releases
WHERE
Releases.ReleaseId = WorkLog.ReleaseId
and WorkLogDateTime >= @StartDate
and WorkLogDateTime <= @end
我真的不需要子版本的版本名称,我只想要根版本名称,所以我想选择这样的 While 循环的结果:
WHILE (ParentReleaseId != 0)
BEGIN
@ReleaseId = ParentReleaseId
END
Select Release.Name
where Release.RealeaseId = @ReleaseId
我知道语法很糟糕,但希望我能让您了解我想要实现的目标。
【问题讨论】:
-
所以我猜
ParentReleaseId等于零的版本不止一个? -
你是说 Releases 表是分层的,例如 Release X 有一个前任,然后那个版本有它自己的前任,等等?那么问题是要找到在指定日期内发生的任何以后版本的原始版本?
-
希望您使用的是 2005 年或之后的版本 - 您能确认一下吗?
-
是的,有多个父版本 = 0。大卫是的,你有这个权利。我在 2008 年,达米安
-
看起来您在下面的递归 CTE 答案中朝着正确的方向迈出了一大步。祝你好运!
标签: sql-server sql-server-2008 tsql while-loop