BAD
SELECT p.mbr_id
,p.pay_ym AS bill_ym
,d.pay_ym AS detail_ym
,d.pay_seq
,d.pay_amt
FROM startdbpg.tr_mbr_fee_pay p
INNER JOIN startdbpg.tr_mbr_fee_pay_det d
ON d.mbr_id = p.mbr_id
WHERE p.mbr_id = 'M1'
ORDER BY p.pay_ym, d.pay_ym, d.pay_seq
;
SQL
복사
실행계획 보기
•
회원 ID만으로 조인하면 청구월이 서로 다른 납부 정보와 상세 내역까지 연결됩니다. 필요한 조인 키가 빠져 데이터가 중복되거나 잘못된 결과가 나올 수 있습니다.
GOOD
SELECT p.mbr_id
,p.pay_ym AS bill_ym
,d.pay_ym AS detail_ym
,d.pay_seq
,d.pay_amt
FROM startdbpg.tr_mbr_fee_pay p
INNER JOIN startdbpg.tr_mbr_fee_pay_det d
ON d.mbr_id = p.mbr_id
AND d.pay_ym = p.pay_Ym
WHERE p.mbr_id = 'M1'
ORDER BY p.pay_ym, d.pay_ym, d.pay_seq
;
SQL
복사
실행계획 보기
•
회원 ID와 청구월(pay_ym)을 모두 조인 조건에 포함해 같은 회원의 같은 청구월 내역만 정확하게 연결합니다.
•
TIP
•
일반적인 관계형 모델에서 PK–FK 관계로 조인할 때는 어느 한쪽 테이블의 PK를 구성하는 모든 컬럼이 조인 조건에 포함되는 경우가 많습니다. 특별한 목적의 조인이 아니라면, 복합 PK의 일부가 누락되지 않았는지 먼저 확인하세요.
KEY POINT
•
복합 PK·FK 관계로 조인할 때는 필요한 키 컬럼이 조인 조건에 모두 포함됐는지 확인합니다. 일부 키만 비교하면 서로 다른 청구월의 데이터가 연결되는 등 잘못된 결과가 나올 수 있습니다.



