Der Schlüssel zum Debuggen solcher Situationen besteht darin, die Unterabfrage / Inline-Ansicht selbst auszuführen, um zu sehen, wie die Ausgabe lautet:
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
Wenn Sie dies ausführen, werden Sie feststellen, dass der profile_idWert nicht mit dem u.idWert von übereinstimmt. Dies u162231993würde erklären, warum mbgReferenzen zurückgegeben werden null(dank des linken Joins; Sie würden nichts erhalten, wenn es sich um einen inneren Join handelt).
Sie haben sich mit in eine Ecke codiert TOP, da Sie jetzt die Abfrage optimieren müssen, wenn Sie sie für andere Benutzer ausführen möchten. Ein besserer Ansatz wäre:
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'
Damit können Sie den idWert in der whereKlausel ändern , um Datensätze für jeden Benutzer im System zu überprüfen.