두 개의 테이블이 있습니다- '사용자'와 '감독'
이 예에서 사용자 테이블은 매우 간단합니다.
Users
=====
ID (PK)
UserName
일부 사용자는 다른 사용자를 관리하므로이를 관리하기 위해 두 번째 테이블 '감독'을 만들었습니다.
Supervision
===========
UserID
SuperID - this is the ID of the staff member that the user supervises.
이 테이블은 특정 사용자 감독자를 식별하기 위해 사용자 테이블을 자체에 결합하는 데 사용됩니다. 한 사용자에게 두 명 이상의 감독자가있을 수 있으므로이 테이블은이를 위해 완벽하게 작동합니다.
다음은 '사용자'의 샘플 데이터입니다.
userID userName
1 Bob
2 Margaret
3 Amy
4 Emma
5 Carol
6 Albert
7 Robert
8 Richard
9 Harry
10 Arthur
그리고 '감독'의 내 데이터 :-
userID superID
1 2
1 3
2 4
2 5
3 4
3 5
6 1
6 7
7 8
7 9
9 10
Bob에게 직접보고하는 사람을 보려면 SQL 쿼리를 작성하는 것이 간단하며 Margaret과 Amy가 자신의 직속보고 자라고 말합니다.
하지만 제가하고 싶은 것은 Bob 아래에있는 모든 사람을 표시하는 쿼리를 작성하는 것이므로 Bobs 직속 부하 직원과 부하 직원 등을 살펴 봐야합니다. Margaret, Amy, Emma, Carol 이 경우 결과로.
나는 이것이 일종의 재귀를 요구한다고 가정하고 있지만 나는 완전히 갇혀있다 ..
재귀 CTE를 사용해야합니다 .
WITH RCTE AS
(
SELECT * FROM dbo.Supervision WHERE UserID = 1
UNION ALL
SELECT s.* FROM dbo.Supervision s
INNER JOIN RCTE r ON s.userID = r.superID
)
SELECT DISTINCT u.userID, u.userName
FROM RCTE r
LEFT JOIN dbo.Users u ON r.superID = u.userID
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다