대신 하나의 참조를 반환 내가 DB 테이블에게 holiday_replacement
다음 중 하나입니다 NULL
재귀 SQL 쿼리는 재귀 참조
id (INT, NOT NULL)
username (NVARCHAR, NOT NULL)
holiday_replacement (INT, NULL)
이 있거나 그것은 id
필드에 값을 참조합니다.
지금, 지정된 id
가 holiday_replacement이었다 누구를 결정하기 위해 사소한 것,하지만 holiday_replacement이 좋으며,이 쿼리를 복잡하게 할 수 있습니다.
간단 측면에서, 사용자는 자신이 holiday_replacement이있는 holiday_replacement가있을 수 있습니다.
그런 경우 쿼리는 '공휴일 대체 그래프'의 모든 사용자 목록을 반환해야합니다.
는
WITH user_graph AS (
SELECT
*
FROM
table_name
WHERE
holiday_replacement = @current_user_id
UNION ALL
SELECT
tn.*
FROM
table_name tn
JOIN user_graph ug ON ug.holiday_replacement = tn.id
)
SELECT
id
FROM
user_graph
그러나,이 쿼리는 직접이 자신의 holiday_replacement로 @current_user_id
을 참조도의 계정에 반환해야 다른 사용자를 고려하지 않습니다이있는 사용자 반환 현재 내가있다 이 연결. 나는 다음과 같은 3 사용자가있는 경우 예를 들어
는 : @current_user_id
= 1 다음
id = 1, username = 'user_1', holiday_replacement = NULL
id = 2, username = 'user_2', holiday_replacement = 1
id = 3, username = 'user_3', holiday_replacement = 2
쿼리 해야 반환
id
---
2
3
을하지만, 현재 만 직접 참조하는 것을 고려 사용자 및 반환
id
---
2
내가 바꿀 필요가있는 부분에 대해서는 머리를 감쌀 수 없습니다. 누구든지 도와 줄 수 있습니까? 코드 아래
당신은 복용 시도 했'WHERE' CTE에 외부? – JohnHC
CTE에서 잘못 가입했습니다. 조인 표현식에서'ug.id = tn.holiday_replacement' instend of'ug.holiday_replacement = tn.id'를 사용하십시오 – Uday