Plusieurs remarques :
- utilise les balises code. C'est plus lisible et ça permet d'indenter
- la deuxième requête n'est pas tout à fait la même. Il manque une restriction (donc elle modifie plus d'enregistrements) :
WHERE N2.iCUS_PRINCIPAL = 0
- la deuxième requête me paraît mieux écrite, et devrait être plus performante (la requête 1 fait plusieurs sous-requêtes pour chaque enregistrement de N2)
- dans la deuxième requête, pourquoi tu fais les sous-requêtes R1 et R2 ? Elles sont quasiment identiques et tu peux récupérer les deux infos en une seule sous-requête :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| UPDATE N2
SET
N2.tsCreated = COALESCE(R1.dateInserted, N2.tsCreated)
, N2.tsLastModified =
CASE WHEN (N2.tsLastModified > R1.dateModified)
THEN
N2.tsLastModified
ELSE
COALESCE(R1.dateModified, N2.tsLastModified)
END
FROM neolane.NmsRecipient N2
LEFT JOIN
(
SELECT iRecipientIdProd, MIN(dateInserted) dateInserted, MAX(dateModified) dateModified
FROM dbo.SrcRecipient
GROUP BY iRecipientIdProd
) R1
ON R1.iRecipientIdProd = N2.iRecipientId
WHERE N2.iCUS_PRINCIPAL = 0 |
Partager