इस तरह की स्थितियों को डीबग करने की कुंजी यह है कि उत्पादन क्या है यह देखने के लिए अपने दम पर सबक्वीरी / इनलाइन व्यू चलाएं:
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
क्लॉज में मान बदल सकते हैं ।