[mySql] lead, leg 문법

히세·2022년 9월 5일
0

mysql

목록 보기
1/2

1. 경우

게시글 상세 보기 화면에서 게시글 번호를 기준으로 앞 글, 뒷 글로 넘어가는 paging button 동작이 필요했다. 우리가 아는 게시물 목록이 아닌, 바로 앞 글과 이전 글로 이동하기 위한 paging이라 부수적인 기능은 필요하지 않았다.

게시글 번호 +1, -1식으로 하기엔 게시글이 delete 되면 게시물 번호에 null이 있어서, 다른 대안이 필요했다. (delete 하지 않고 delete_yn column의 Y, N으로 따로 관리하지만 안정성을 위하여.)

2. 대안

lead와 leg 문법은 각 다음 행과 이전 행을 가져오는 문법이다.

3. Lead & Leg

Lead(기준컬럼, 1, 0): 다음 row 값. 기준컬럼 + 1 다음 값을 얻어 온다. 0은 null 대신 쓸 default 값이다.
leg: 이전 row 값. 기준컬럼 - 1 다음 값을 얻어 온다. 0은 null 대신 쓸 default 값이다.

4. 사용 Query

SELECT
	result.*
FROM (
		SELECT
			tp.posting_id,
			LEAD(posting_id, 1) over(ORDER BY posting_id) nextPage,
            lag(posting_id, 1) over(ORDER BY posting_id) prevPage
        FROM tb_posting tp
        WHERE delete_yn = 'N'
        ORDER BY tp.posting_id DESC
      ) result
WHERE posting_id = 1001;

from절까지는 tb_posting에 있는 모든 posting_id의 앞 행과 뒷행을 가져오라는 내용이고, 해당 내용의 posting_id = 1001의 값만 가져오라는 query이다. 아래는 예시이다. 빈 값은 null이다.

from절 값

posting_id|nextPage|prevPage|
----------+--------+--------+
      4755|        |    4754|
      4754|    4755|    4752|
      4752|    4754|    4751|
      4751|    4752|    4750|
      4750|    4751|    4749|
      4749|    4750|    4748|
      4748|    4749|    4747|
      4747|    4748|    4746|
      4746|    4747|    4745|
      4745|    4746|    4744|
      4744|    4745|    4743|
      4743|    4744|    4742|

query 도출 값

posting_id|nextPage|prevPage|
----------+--------+--------+
      1001|    1002|        |
profile
일하게 해 주셔서 감사합니다🙇‍♀️

0개의 댓글