CTE – рекурсивный запрос делает слишком много

У меня есть текущая таблица данных …

| LoanRollupID | NewLoanID | PreviousLoanID | |--------------|-----------|----------------| | 11 | 76 | 44 | | 12 | 80 | 75 | | 13 | 83 | 82 | | 14 | 84 | 83 | | 15 | 86 | 85 | | 16 | 87 | 54 | | 17 | 88 | 87 | | 18 | 90 | 48 | | 19 | 91 | 34 | | 20 | 93 | 41 | | 21 | 94 | 76 | | 22 | 95 | 90 | | 23 | 96 | 94 | | 24 | 100 | 92 | | 25 | 101 | 99 | | 26 | 102 | 98 | | 27 | 103 | 101 | | 28 | 104 | 81 | | 29 | 105 | 80 | | 30 | 107 | 52 | | 31 | 110 | 108 | | 1029 | 1105 | 103 | | 1030 | 1106 | 104 | | 1031 | 1108 | 1106 | | 1032 | 1109 | 73 | 

Я пытаюсь перейти на NewLoanID 1108 и посмотреть, как он развился из предыдущих кредитов. например, 1108 пришли из 1106, которые пришли от 104, которые пришли от 81 и т. д.

Когда я запускаю этот запрос:

 WITH OldLoans (PreviousLoanID, NewLoanID, start) AS ( ---- Anchor member definition SELECT l.NewLoanID, l.PreviousLoanID, 0 as start FROM dscs_public.LoanRollup l Where NewLoanID = 1108 UNION ALL -- Recursive member definition SELECT l.NewLoanID, l.PreviousLoanID, start + 1 FROM dscs_public.LoanRollup l INNER JOIN OldLoans AS o ON o.NewLoanID = l.PreviousLoanID ) ---- Statement that executes the CTE SELECT PreviousLoanID, NewLoanID, start FROM OldLoans 

Он не справляется с этой ошибкой:

Заявление прекращено. Максимальная рекурсия 100 была исчерпана до завершения заявки.

Может ли кто-нибудь заметить мою ошибку, пожалуйста? Благодарю.

Алиасы в определении CTE находятся в неправильном порядке:

 -- Instead of (PreviousLoanID, NewLoanID, start) WITH OldLoans (NewLoanID, PreviousLoanID, start) AS ( ---- Anchor member definition SELECT l.NewLoanID, l.PreviousLoanID, 0 as start FROM mytable l --LoanRollup l Where NewLoanID = 1108 UNION ALL -- Recursive member definition SELECT l.NewLoanID, l.PreviousLoanID, start + 1 FROM mytable l --dscs_public.LoanRollup l INNER JOIN OldLoans AS o -- Instead of o.NewLoanID = l.PreviousLoanID ON l.NewLoanID = o.PreviousLoanID ) ---- Statement that executes the CTE SELECT PreviousLoanID, NewLoanID, start FROM OldLoans 

То же самое справедливо для предложения ON в определении рекурсивного члена.

  • Рекурсивная сумма в иерархии parent-child T-SQL
  • Используйте рекурсивное общее выражение таблицы SQL Server для получения полного пути ко всем файлам в папке (с подпапками)
  • Решение Directed Graph с рекурсией
  • SQL Server: как выполнить UPDATE из рекурсивной функции?
  • Контролирование порядка братьев по рекурсивному CTE?
  • Использование рекурсивного CTE с GroupBy
  • Как рекурсивно запрашивать результаты в одной таблице на SQL-сервере
  • Рекурсивный метод SQL для добавления в auto increment
  • SQL-рекурсивный udf всегда возвращает null
  • Что мне делать, когда я перехожу через maxrecursion с помощью CTE?
  • Пройти родительское / дочернее дерево с рекурсивным CTE?
  • Давайте будем гением компьютера.