0
我有以下數據如何正確地構建從我的SQL數據有n的深度圖
| 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]
有了這個小測試數據,性能相當不錯 - 但是當增加數據和深度時,執行會變得非常糟糕(由多列連接引起)。
這樣的任務的正確說法是什麼?
什麼是您的預期產出?你的查詢只返回(1,2)和(5,1),我沒有看到背後的理由。 –
@Lieven我沒有建立一個真正的樹,而是一個圖:每個關係都有一個「From」和一個「To」。一張圖顯示傳入和傳出的關係。這就是爲什麼,如果我們使用3的深度,應該選擇所有支持的記錄 –
是否允許循環?你的數據看起來是單向的,但你似乎希望搜索雙向。這個假設是否正確? –