Bunun gibi durumlarda hata ayıklamanın anahtarı, çıktının ne olduğunu görmek için alt sorgu / satır içi görünümü kendi başına çalıştırmaktır:
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
O Koşu, bunu görürdünüz profile_iddeğer eşleşmedi u.iddeğerini u162231993herhangi açıklıyor, mbgreferanslar dönecekti null(solda sayesinde katılmak; bir iç birleşim olsaydı şey elde etmem).
Kullanarak kendinizi bir köşeye kodladınız TOP, çünkü şimdi sorguyu diğer kullanıcılar için çalıştırmak istiyorsanız ince ayar yapmanız gerekiyor. Daha iyi bir yaklaşım şöyle olacaktır:
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'
Bununla , sistemdeki herhangi bir kullanıcının kayıtlarını kontrol etmek idiçin wherefıkradaki değeri değiştirebilirsiniz .