이와 같은 상황을 디버깅하기위한 핵심은 하위 쿼리 / 인라인 뷰를 자체적으로 실행하여 출력이 무엇인지 확인하는 것입니다.
SELECT TOP 1
dm.marker_value,
dum.profile_id
FROM DPS_USR_MARKERS dum (NOLOCK)
JOIN DPS_MARKERS dm (NOLOCK) ON dm.marker_id= dum.marker_id
AND dm.marker_key = 'moneyBackGuaranteeLength'
ORDER BY dm.creation_date
그 실행, 당신은 볼 것이다 profile_id
값이 일치하지 않는 u.id
값 u162231993
어떤 이유를 설명하는 것, mbg
참조가 반환 null
(왼쪽 덕분에 조인, 그것은 내부 조인한다면 당신은 아무것도 얻을 수 없겠죠).
이제 TOP
다른 사용자를 위해 쿼리를 실행하려면 쿼리를 조정해야하므로를 사용하여 자신을 코너로 코딩 했습니다. 더 나은 접근 방식은 다음과 같습니다.
SELECT u.id,
x.marker_value
FROM DPS_USER u
LEFT JOIN (SELECT dum.profile_id,
dm.marker_value,
dm.creation_date
FROM DPS_USR_MARKERS dum (NOLOCK)
JOIN DPS_MARKERS dm (NOLOCK) ON dm.marker_id= dum.marker_id
AND dm.marker_key = 'moneyBackGuaranteeLength'
) x ON x.profile_id = u.id
JOIN (SELECT dum.profile_id,
MAX(dm.creation_date) 'max_create_date'
FROM DPS_USR_MARKERS dum (NOLOCK)
JOIN DPS_MARKERS dm (NOLOCK) ON dm.marker_id= dum.marker_id
AND dm.marker_key = 'moneyBackGuaranteeLength'
GROUP BY dum.profile_id) y ON y.profile_id = x.profile_id
AND y.max_create_date = x.creation_date
WHERE u.id = 'u162231993'
이를 통해 절의 id
값을 변경 where
하여 시스템의 모든 사용자에 대한 레코드를 확인할 수 있습니다.