Sql 如何避免在此处使用while循环?
作为一个从未从SQL任何人那里得到指导的人,我想听听你们是如何进行下面的查询的。据我所知,像这样的循环是一种非常糟糕的方式 我正在通过以下方式在查询中创建表:Sql 如何避免在此处使用while循环?,sql,loops,stored-procedures,while-loop,Sql,Loops,Stored Procedures,While Loop,作为一个从未从SQL任何人那里得到指导的人,我想听听你们是如何进行下面的查询的。据我所知,像这样的循环是一种非常糟糕的方式 我正在通过以下方式在查询中创建表: DECLARE @maxReleases int SET @maxReleases = 100000 DECLARE @RootReleases table (ReleaseId int, RootReleaseId int) DECLARE @ctr int Set @ctr = 1 WHILE(@ctr <= @maxRe
DECLARE @maxReleases int
SET @maxReleases = 100000
DECLARE @RootReleases table (ReleaseId int, RootReleaseId int)
DECLARE @ctr int
Set @ctr = 1
WHILE(@ctr <= @maxReleases)
BEGIN
WITH cte_Releases
(
ReleaseId,
Name,
ParentReleaseID
)
AS(
SELECT
ReleaseId,
Name,
ParentReleaseID
FROM Releases
Where ReleaseId = @ctr
UNION ALL
SELECT
R.ReleaseId,
R.Name,
R.ParentReleaseID
FROM Releases R
INNER JOIN cte_Releases ON cte_Releases.ParentReleaseID = R.ReleaseId
)
INSERT INTO @RootReleases
SELECT max(ReleaseId) as ReleaseId, min(ReleaseId) as RootReleaseId FROM cte_Releases
SET @ctr = @ctr + 1
END
DECLARE@maxReleases int
设置@maxReleases=100000
声明@RootReleases表(ReleaseId int,RootReleaseId int)
声明@ctr int
设置@ctr=1
而(@ctr我没有数据要测试,所以请告诉我,如果沿着这些线运行某个程序,会发生什么情况。
应该可以使用分组和聚合。
如果您提供样本数据,我可能会提供更多帮助
DECLARE @RootReleases table (ReleaseId int, RootReleaseId int)
; WITH cte_Releases
(
ReleaseId,
Name,
ParentReleaseID
)
AS(
SELECT
ReleaseId,
Name,
ParentReleaseID
FROM Releases
-- Where ReleaseId = @ctr
UNION ALL
SELECT
R.ReleaseId,
R.Name,
R.ParentReleaseID
FROM Releases R
INNER JOIN cte_Releases ON cte_Releases.ParentReleaseID = R.ReleaseId
)
INSERT INTO @RootReleases
SELECT max(ReleaseId) as ReleaseId, min(ReleaseId) as RootReleaseId FROM cte_Releases
WHERE ReleaseId BETWEEN 1 AND 100000
GROUP BY ReleaseId