2017-12-28 1 views
0

SQL Server에서 From 및 To 열을 테이블에 포함합니다.SQL Server : 최장 경로

From To 
- - 
1 5 
1 7 
1 8 
1 17 
2 11 
3 5 
4 7 
5 12 
5 13 
5 17 
8 13 
8 17 
13 17 

어떻게 입력으로 주어진 두 npoint 사이에서 가장 긴 경로를 찾으십니까? 5 - - 13-17

+0

경로 란 무엇입니까? 이'(x, y)'가 데카르트 비행기에서 좌표를 맞추고 있습니까? 'From To'와 같은 것입니까? 나는 당신의 모범이 ** 가장 긴 ** 길인 것을 보지 못했다. 또한 두 노드'(1,17)'사이의 경로를 언급합니다. 어떤 노드가 1이고 어떤 노드가 17입니까? 'ID'가 누락 되었습니까? –

+0

네, From-To와 같습니다. 귀하의 의견을 토대로 질문을 업데이트했습니다. 감사. – Jhudge

+0

데이터에 재귀 사이클이 있습니까? –

답변

2

SQL DEMO

WITH Path (FromID, ToID, Length, nodes) AS (
    SELECT t1.FromID, t1.ToID, 0 as Length, 
      CAST(t1.FromID AS VARCHAR(max)) +'-'+ 
      CAST(t1.ToID AS VARCHAR(max)) as nodes 
    FROM Table1 t1 
    UNION ALL 
    SELECT P.FromID, t2.ToID, P.Length + 1, 
      P.nodes + '-' + CAST(t2.ToID AS VARCHAR(max)) as nodes 
    FROM Table1 t2 
    JOIN Path P 
     ON P.ToID = t2.FromID 
) 
SELECT * 
FROM Path 
WHERE FromID = 1 
    and ToID = 17 
Order by Length 

OUTPUT 17 행 1에서

가 입력이 1,17 인 경우, 예를 들어, 그 응답은 1이어야 길이가 2 인 경로가있는 넥타이

| FromID | ToID | Length |  nodes | 
|--------|------|--------|-----------| 
|  1 | 17 |  0 |  1-17 | 
|  1 | 17 |  1 | 1-8-17 | 
|  1 | 17 |  1 | 1-5-17 | 
|  1 | 17 |  2 | 1-5-13-17 | 
|  1 | 17 |  2 | 1-8-13-17 | 
+0

Juan에게 감사드립니다. 내 데이터 세트에서이 오류가 발생합니다. 문이 종료되었습니다. 명령문 완료 전에 최대 재귀 100이 모두 소모되었습니다. CTE 내부의 입력을 지정할 수 있습니까? – Jhudge

+0

이것은주기가 너무 길거나 경로가 너무 길다는 것을 의미합니다. 'length <100'를 추가하십시오. –

+0

문제가 긴 경로 인 경우 무한 재귀를 허용하도록 최대 재귀를 변경할 수 있습니다. 그러나 당신의 질문이 끝나지 않을주기가 있다면. https://stackoverflow.com/questions/9650045/the-maximum-recursion-100-has-been-exhausted-before-statement-completion –

관련 문제