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 : 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
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 : 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
et

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
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 ?