폴더를 나타내는 일반적인 부모/자식 관계 테이블이 있습니다. 내 과제는 다른 테이블과 함께 사용하는 것입니다.관련된 테이블이있는 SQL Server 재귀 쿼리
folder
테이블은 다음과 같이이다 :
+--+----+--------+
|id|name|parentid|
+--+----+--------+
|1 |a |null |
+--+----+--------+
|2 |b |1 |
+--+----+--------+
|3 |c1 |2 |
+--+----+--------+
|4 |c2 |2 |
+--+----+--------+
association
테이블은 다음과 같이이다 : association.id = 66
이 folder.id = 2
에 관계가 어디
그렇게+--+--------+
|id|folderid|
+--+--------+
|66|2 |
+--+--------+
|77|3 |
+--+--------+
내가 필요 그게 무슨 첫 번째 조상의 association.id
을 association
테이블의 레코드. 위의 예제 데이터를 사용하여 folder.id
이 3
인 경우 77
을 찾을 것으로 예상됩니다. 이 2
또는 4
이라고 가정하면 66
을 찾을 수 있습니다. 다른 folder.id
값은 null을 찾습니다. 내가 재귀에 LEFT JOIN
를 사용하여 시도 한 association.id
를 포함하려면
+--+----+--------+---+
|id|name|parentid|lvl|
+--+----+--------+---+
|1 |a | |2 |
+--+----+--------+---+
|2 |b |1 |1 |
+--+----+--------+---+
|4 |c2 |2 |0 |
+--+----+--------+---+
:
WITH [recurse] (id,name,parentid,lvl) AS
(
select a.id,a.name,a.parentid,0 FROM folder AS a
WHERE a.id='4'
UNION ALL
select r.id,r.name,r.parentid,lvl+1 FROM folder as r
INNER JOIN [recurse] ON recurse.parentid = r.id
)
SELECT * from [recurse] ORDER BY lvl DESC
산출 결과 :
찾기 폴더 조상이 같은 공통 테이블 표현식 수행 할 수 있습니다 CTE의 일부분이지만 SQL Server에서는 허용되지 않습니다.
이 문제를 해결할 수있는 방법은 무엇입니까?
더 나은 방법은 특정 association.id
을 직접 쿼리하는 것입니다. 이것은 당신에게 연결 테이블의 값을 갖는 레코드를 줄 것이다
감사합니다! 재귀 문을 사용하는 방법을 생각하고 결과 사용에 대해 생각하지 않았습니다. – jltrem