Kunci untuk men-debug situasi seperti ini adalah dengan menjalankan subquery / inline view sendiri untuk melihat keluarannya:
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
Dengan menjalankan itu, Anda akan melihat bahwa profile_idnilainya tidak cocok dengan u.idnilai dari u162231993, yang akan menjelaskan mengapa mbgreferensi akan dikembalikannull (berkat left join; Anda tidak akan mendapatkan apa pun jika itu adalah inner join).
Anda telah mengkodekan diri Anda sendiri ke sudut menggunakan TOP, karena sekarang Anda harus mengubah kueri jika Anda ingin menjalankannya untuk pengguna lain. Pendekatan yang lebih baik adalah:
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'
Dengan itu, Anda dapat mengubah idnilai dalam whereklausa untuk memeriksa catatan untuk setiap pengguna di sistem.