UPDATE avec Jointure, clause GROUP BY et HAVING
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 :
Code:
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 |
FLD000 c'est ma clef primaire
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 :
Code:
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 |
et
Code:
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 |
j'avoue que je calle surcomment construire cette requête et je me dit qu'on peut pas faire comme cela.
Qu'en pensez vous ?