MAIN - DETAIL 조인하여 DETAIL 가장 최신것 가져 올때 보통 어떤 쿼리 쓰시나요? 0 3 8,431

by 푸른밤 [SQL Query] [2025.02.23 17:07:39]


MAIN 테이블이 있고 DETAIL 이 있을때

WHERE MAIN.ID = DETAIL.ID

AND DETAIL.SEQ = ( SELECT MAX(SEQ) FROM DETAIL WHERE ID = MAIN.ID )

* 예전에 프로젝트 돌때는 그냥 이렇게 MAX 가져와서 주로 썼는데

쿼리 손 놓다가 오랜만에 쿼리 만지는데 다른 더 좋은 방법이 있나요?

by 아발란체 [2025.02.24 10:14:10]

seq가 unique index 경우라면, 인덱스 태우면 거의 비용이 없을 거 같습니다 :D

from. 쿼리 늘 손 놓은 사람


by 마농 [2025.02.24 13:39:27]

분석합수, 순위함수 ROW_NUMBER(), rn = 1 사용합니다.
전체 조인시에는 rn 후 조인
일부 조인시에는 조인 후 rn
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-- 조인 전 rn
SELECT ...
  FROM main_t m
     , (SELECT ROW_NUMBER() OVER(PARTITION BY id ORDER BY seq DESC) rn
             , id
             , seq
             , ...
          FROM detail_t
        ) d
 WHERE m.id = d.id
   AND d.rn = 1
;
 
-- 조인 후 rn
SELECT ...
  FROM (SELECT m.id
             , m....
             , d.seq
             , d....
             , ROW_NUMBER() OVER(PARTITION BY id ORDER BY seq DESC) rn
          FROM main_t m
             , detail_t d
         WHERE m.id = d.id
        )
 WHERE rn = 1
;

 


by 푸른밤 [2025.02.24 23:30:51]

오호 감사합니다~

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입