У меня есть следующие данные
| From | To |
+------+----+
| 1 | 2 |
| 2 | 3 |
| 2 | 4 |
| 5 | 1 |
| 6 | 5 |
| 5 | 7 |
+------+----+
Теперь я хотел бы запросить мои данные с помощью расширенного выбора CTE, например
DECLARE @start INT;
SET @start = 1;
DECLARE @depth INT;
SET @depth = 1;
WITH
[Recursive] AS
(
SELECT
1 as [level],
*
FROM [dbo].[myTable]
WHERE @start IN ([From], [To])
UNION ALL
SELECT
t1.[level] + 1,
t2.*
FROM [Recursive] t1
JOIN [dbo].[myTable] t2
ON t1.[level] < @depth
AND
(
t1.[From] IN (t2.[From], t2.[To])
OR t1.[To] IN (t2.[From], t2.[To])
)
)
SELECT DISTINCT
[From],
[To]
FROM [Recursive]
С этими небольшими тестовыми данными производительность вполне удовлетворительная, но при увеличении данных и глубины выполнение становится очень плохим (вызвано объединением нескольких столбцов).
Как правильно сформулировать такую задачу?