mssql 재귀쿼리 REPLICATE
*전체적인 구조
WITH TEMP AS
(
SELECT 컬럼
FROM 테이블명
UNION ALL
SELECT 컬럼
FROM 테이블명
INNER JOIN TEMP
ON 테이블명.컬럼 = TEMP.컬럼
)
SELECT * FROM TEMP(재귀쿼리)
-재귀쿼리 사용을 위해서 WITH절 밖에서 사용해야하므로 SELECT...절을 통해서 재귀쿼리를 조회해서 사용했음
- WITH RECURSIVE 규칙
- RECURSIVE를 사용할 때는 서브 쿼리내에서 UNION (ALL) 이 사용되어야 한다.
- 한 개 이상의 Non-Recursive 문장이 포함되어 있어야 한다. (첫번째 루프에서만 실행됨, anchor 역할임. 이것 미만의 계층구조로 연결되어 있는 것들 다 나옴)
- 반복되는 Recursive문은 반드시 정지조건(where) 이 필요하다. (반복)
- select시에 convert사용은 앵커멤버와 재귀맴버의 유형을 일치시켜주기 위해서
REPLICATE(반복 문자, 문자 반복 횟수)
CASE WHEN LVL = 0 THEN A.MENU_NM ELSE REPLICATE(' ', (A.LVL)) + '└ ' + A.MENU_NM END
-> lvl이 0이면 메뉴이름이 그대로이고 그렇지 않은경우 반복문자(공백)를 반복횟수(레벨)만큼넣고...
참조 : https://highjune.dev/database/mysql_recursion_hierachy_query/
(mysql) 재귀쿼리로 계층구조 데이터 표현(id - varchar)
재귀쿼리로 계층구조 데이터 표현하기(id(varchar)로) id에 varchar로 계층구조를 담아서 하지 않고 integer로 설계해서 표현하는 설계방법은 여기로. mysql 기준으로 설명 (오라클은 CONNECT BY PRIOR, START WIT
highjune.dev
참조2 : https://nive.tistory.com/149
재귀쿼리
회사에는 여러부서가 있다. 그리고 그안에 또 팀에 있고...이들을 계층형으로 보고싶을때, 어느팀이 어느 부서에 속해있는지를 알고싶은 경우가 있다. 또한 각 최상위 부서별로 무언가에 대한
nive.tistory.com