Bonjour,
J'utilise pas mal de requête du genre :
En fait, de souvenir, je passe par là car je suis en Firebird 2.1 et le moteur n'accepte pas de faire des UPDATE sur plusieurs tables:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 UPDATE MATABLE1 T1 SET T1.FIELD = "QQC" WHERE T1.ID IN ( SELECT T2.ID FROM MATABLE1 T2 JOIN MATABLE2 T3 ON T2.ID = T3.T2ID WHERE <conditions plus ou moins complexe...> )
Ou même en passant par des JOIN au niveau de l'UPDATE, il rejette la requête
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 UPDATE MATBLE1 T1,MATABLE2 T2 SET T1.FIELD = "QQC" WHERE T1.F1 =... AND T2.F3 = ....
Le truc c'est qu'en passant par une sous-requête et en faisant WHERE ID IN (liste ID résultat d'une requête)
J'ai l'impression, en fait vu les statistique du résultat, c'est pas qu'une impression, qu'il exécute la sous-requête autant de fois qu'elle ne contient de résultat. Du coup, le temps d'exécution est énorme et est proportionnel au nombre de resultat de sou-requête.
Actuellement j'arrive à optimiser manuellement en exécutant la sous-requête, en copiant les résultats en y insérant une virgule et j'exécute l'UPDATE avec la liste des ID copiés.
Efficace, mais laborieux :o/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 UPDATE MATABLE1 T1 SET T1.FIELD = "QQC" WHERE T1.ID IN (234234,46573,23545,24567,5674578,65463,245654,....)
N'y a-t-il pas un autre moyen pour faire ce genre de chose ?
Merci d'avance
Hervé
[EDIT] oublié le IN dans WHERE
Partager