このような状況をデバッグするための鍵は、サブクエリ/インラインビューを単独で実行して、出力が何であるかを確認することです。
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
、システム内の任意のユーザーのレコードを確認できます。