SQL に関して誰からも指示や指示を受けたことがない人として、次のクエリをどのように作成する必要があるかを皆さんから聞きたいと思います。私が聞いたところによると、このようなループは非常にひどい方法です。
これからクエリ内にテーブルを作成しています:
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
このコードの目的は、レコードを最も遠い親レコードに接続するテーブルを作成し、それをテーブルに挿入して、クエリの他の場所で参照できるようにすることです。