Postgresql은 WITH RECURSIVE 구문으로 재귀쿼리로 사용가능하며
계층형 쿼리로 만들때 많이 사용한다.
with recursive recursive_name [(column1,...)] as (
-- initial query (처음 호출하는 쿼리)
SELECT [(column1, ...)]
UNION [ALL]
-- recursive query (재귀 쿼리) 반복되는 부분
SELECT
[(column1, ...)]
FROM recursive_name
[WHERE]
)
-- parent query
SELECT * FROM recursive_name
이건 내 개인 프로젝트에서 사용하는 답글 기능을 추가한 댓글 리스트를 보여주는 쿼리다.
WITH RECURSIVE cte AS
(
SELECT
a.rno,
a.writer,
a.regDate,
a.content,
a.parnt_rno,
a.depth,
rno as sort,
CAST(rno AS char(99)) x
FROM tbl_reply a
WHERE parnt_rno = 0
AND bno = #{bno}
UNION ALL
SELECT
a.rno,
a.writer,
a.regDate,
a.content,
a.parnt_rno,
a.depth,
sort,
CONCAT(b.x, '-', a.rno) x
FROM tbl_reply a
INNER JOIN cte b
ON a.parnt_rno = b.rno
)
SELECT
*
FROM cte
order by x
UNION ALL 을 사용하여
여기서는 rno로 계층을 만들고 있다. ex) 1-1 이런식으로
'데이터베이스' 카테고리의 다른 글
데이터베이스별 랜덤으로 레코드 가져오기 쿼리 정리 (0) | 2022.11.09 |
---|---|
[MySql] 효과적인 인덱스 설계 (0) | 2022.11.07 |
PostgreSQL 배열 함수 array_agg, array_to_string, unnest, array_append (0) | 2022.11.04 |
PostgreSQL merge문 (0) | 2022.09.19 |
[MySQL] group_concat 사용하기 (멀티행을 싱글행으로) (0) | 2022.03.15 |