Chìa khóa để gỡ lỗi các tình huống như thế này là tự chạy truy vấn con / chế độ xem nội tuyến để xem đầu ra là gì:
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
Chạy điều đó, bạn sẽ thấy rằng profile_idgiá trị không khớp với u.idgiá trị của u162231993, điều này sẽ giải thích lý do tại sao bất kỳ mbgtham chiếu nào sẽ trả về null(nhờ phép nối bên trái; bạn sẽ không nhận được gì nếu đó là phép nối bên trong).
Bạn đã tự mã hóa mình vào một góc bằng cách sử dụng TOP, bởi vì bây giờ bạn phải điều chỉnh truy vấn nếu bạn muốn chạy nó cho người dùng khác. Một cách tiếp cận tốt hơn sẽ là:
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'
Cùng với đó, bạn có thể thay đổi idgiá trị trong wheremệnh đề để kiểm tra bản ghi cho bất kỳ người dùng nào trong hệ thống.