Логика здесь заключается в том, чтобы сначала найти идентификатор родительского фильма для любого идентификатора фильма, переданного в качестве ввода, а затем с помощью рекурсивного запроса выполнить откат от родительского уровня для поиска всех дочерних уровней. Следующий запрос должен делать то, что вы хотите:
CREATE TABLE #movie ([Movie_ID] INT, [Previous_Part] INT, [Title] VARCHAR(25))
INSERT INTO #movie ([Movie_ID], [Previous_Part], [Title])
VALUES
(194500, NULL, 'Part 1'),
(194501, 194500, 'Part 2'),
(194502, 194501, 'Part 3'),
(194503, 194502, 'Part 4'),
(194504, 194503, 'Part 5')
/*** QUERY Starts Here ***/
DECLARE @SerchID INT
SET @SerchID = 194503 -- Movie to search
;WITH Parent AS
(
SELECT *, 1 AS Lvl FROM #movie
WHERE [Movie_ID] = @SerchID
UNION ALL
SELECT mv.*, Lvl+1 AS Lvl FROM #movie mv
INNER JOIN Parent p ON mv.[Movie_ID] = p.[Previous_Part]
)
,RCTE AS
(
SELECT mv.* FROM #movie mv
WHERE [Movie_ID] = (SELECT TOP 1 [Movie_ID] FROM Parent ORDER BY Lvl DESC)
UNION ALL
SELECT mv.* FROM #movie mv
INNER JOIN RCTE rc ON rc.[Movie_ID] = mv.[Previous_Part]
)
SELECT * FROM RCTE r
Результат как показано ниже,
Movie_ID Previous_Part Title
194500 NULL Part 1
194501 194500 Part 2
194502 194501 Part 3
194503 194502 Part 4
194504 194503 Part 5