Votre avis sur deux requètes SQL
Bonjour,
j'aimerai voir votre avis , sur ces deux query laquelle des deux vous semble la mieux écrite, plus performante.
QUERY 1
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| UPDATE N2
SET N2.tsCreated = COALESCE((SELECT MIN(R1.dateInserted)
FROM dbo.SrcRecipient R1
WHERE R1.iRecipientIdProd = N2.iRecipientId),N2.tsCreated)
,N2.tsLastModified = CASE WHEN N2.tsLastModified > (SELECT MAX(R2.dateModified)
FROM dbo.SrcRecipient R2
WHERE R2.iRecipientIdProd = N2.iRecipientId)
THEN N2.tsLastModified
ELSE
COALESCE((SELECT MAX(R3.dateModified)
FROM dbo.SrcRecipient R3
WHERE R3.iRecipientIdProd = N2.iRecipientId),N2.tsLastModified)
END
FROM neolane.NmsRecipient N2
WHERE N2.iCUS_PRINCIPAL = 0 |
--------------------------------------------------------------------------------------------
QUERY 2
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| UPDATE N2
SET tsCreated = COALESCE(R1.dateInserted,N2.tsCreated)
,N2.tsLastModified = CASE WHEN N2.tsLastModified > R2.dateModified
THEN N2.tsLastModified
ELSE COALESCE(R2.dateModified,N2.tsLastModified)
END
FROM neolane.NmsRecipient N2
INNER JOIN
( SELECT iRecipientIdProd, MIN(dateInserted) dateInserted
FROM dbo.SrcRecipient
GROUP BY iRecipientIdProd
) R1
ON R1.iRecipientIdProd = N2.iRecipientId
INNER JOIN
( SELECT MAX(dateModified) dateModified, iRecipientIdProd
FROM dbo.SrcRecipient
GROUP BY iRecipientIdProd
) R2
ON R2.iRecipientIdProd = N2.iRecipientId |
Si je peux me permettre d'ajouter mon grain de sel...
A moins que ce j'ai lu récemment à ce sujet soit faux, UPDATE...FROM... n'est pas du sql normatif.
Du point de vue de la norme SQL, un ordre de type UPDATE a une clause SET et une clause WHERE. Et c'est tout. S'il faut aller chercher des infos "ailleurs", il faudrait le faire via des sous-requêtes.
On n'a pas la version de SQL Server utilisée ici mais on peut raisonnablement supposé de nos jours qu'il s'agit d'une version 2008R2 ou +. Du coup, toujours histoire de coller avec la norme, on peut utiliser l'instruction MERGE si on veut vraiment faire une jointure.
N.B. : Si je retrouve l'article en question, je posterai la source.
EDIT : Et voilà l'article.