Je vous explique mon problème :
J'ai 2 tables TableA et TableS. TableS est la table dans laquelle je dois mettre le champs FLD024 à jour suivant un critère de comptage dans la table B.
Voici la requête de sélection qui me permet de savoir quelles lignes vont être MAJ :
FLD000 c'est ma clef primaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT S.FLD000, SUM(A.NbLect), SUM(A.NbLien) FROM TableS S INNER JOIN TableA A ON S.FLD000 = A.FLD000 WHERE DATEDIFF(DAY,A.DateGen, GETDATE()) <= 30 AND (S.FLD024 <> 0 OR S.FLD024 IS NULL ) GROUP BY A.FLD000 HAVING SUM(A.NbLect) < 2 AND SUM(A.NbLien) < 6
Je souhaite transformer cette requête pour faire l'update du champ FLD024 en intégrant directement la jointure. Je sais que je pourrais utiliser la requête ci dessus comme une sous requête, mais je me dit qu'en faisant une jointure ca sera plus rapide. J'ai essayé différentes combinaisons qui ne fonctionnent sans succès :
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 UPDATE TableS SET FLD024 = 0, FLD023 = GETDATE() FROM TableS S INNER JOIN TableA A ON S.FLD000 = A.FLD000 WHERE DATEDIFF(DAY,A.DateGen, GETDATE()) <= 30 AND (S.FLD024 <> 0 OR S.FLD024 IS NULL ) GROUP BY FLD000 HAVING SUM(A.NbLect) < 2 AND SUM(A.Nblien) < 6
j'avoue que je calle surcomment construire cette requête et je me dit qu'on peut pas faire comme cela.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 UPDATE TableS S INNER JOIN TableA A ON S.FLD000 = A.FLD000 SET S.FLD024 = 0, S.FLD023 = GETDATE() WHERE DATEDIFF(DAY,A.DateGen, GETDATE()) <= 30 AND (S.FLD024 <> 0 OR S.FLD024 IS NULL ) GROUP BY S.FLD000 HAVING SUM(A.NbLect) < 2 AND SUM(A.NbLien) < 6
Qu'en pensez vous ?
Partager