17-01-2012, 04:26 PM
Si tu reprends la première requête que j'ai posté, tu verras que ce que j'ai décomposé correspond à tout ce qui se trouve entre parenthèse après le INNER JOIN.
En effet, la requête entre parenthèse sert à construire cette fameuse table temporaire (TmpRes) qui est utilisée dans l'update, ce qui au final, permet de faire la mise à jour tant souhaitée en une seule passe.
Pour conclure sur une parenthèse, il ne faut pas sous-estimer la puissance des moteurs SQL en général. Avec un peu d'astuce et de technique, on peut passer outre une grande partie des problèmes.
MySQL permet heureusement l'utilisation de sous requêtes (très utile dans le cas présent) mais on est encore bien loin des formidables possibilités des 'gros' moteurs.
Pour parler de ce que je connais, les CTE (Common Table Expression) et l'utilisation des directives CROSS APPLY sur SQL Server ouvrent des possibilités faramineuses dans le traitement de problèmes faisant appel aux boucles et/ou à la récursivité.
D'ailleurs, si vous avez un petit quart d'heure (et quelques aspirines si vous n'avez pas l'habitude du SQL), je vous conseille la lecture de cet excellent article qui présente quelques possibilités des CTE pour travailler récursivement (le chapitre IV-B et les exemples 24 & 25 sur le problème du voyageur de commerce sont particulièrement bluffants)
En effet, la requête entre parenthèse sert à construire cette fameuse table temporaire (TmpRes) qui est utilisée dans l'update, ce qui au final, permet de faire la mise à jour tant souhaitée en une seule passe.
Pour conclure sur une parenthèse, il ne faut pas sous-estimer la puissance des moteurs SQL en général. Avec un peu d'astuce et de technique, on peut passer outre une grande partie des problèmes.
MySQL permet heureusement l'utilisation de sous requêtes (très utile dans le cas présent) mais on est encore bien loin des formidables possibilités des 'gros' moteurs.
Pour parler de ce que je connais, les CTE (Common Table Expression) et l'utilisation des directives CROSS APPLY sur SQL Server ouvrent des possibilités faramineuses dans le traitement de problèmes faisant appel aux boucles et/ou à la récursivité.
D'ailleurs, si vous avez un petit quart d'heure (et quelques aspirines si vous n'avez pas l'habitude du SQL), je vous conseille la lecture de cet excellent article qui présente quelques possibilités des CTE pour travailler récursivement (le chapitre IV-B et les exemples 24 & 25 sur le problème du voyageur de commerce sont particulièrement bluffants)
Quand on te dit qu'un projet est terminé à 90%, prépare toi pour les 90% suivant
Ninety-Ninety Rule
"Une guerre de religions, c'est quand deux peuples s'entretuent pour savoir qui a le meilleur ami imaginaire"
Vu sur IRC
Ninety-Ninety Rule
"Une guerre de religions, c'est quand deux peuples s'entretuent pour savoir qui a le meilleur ami imaginaire"
Vu sur IRC