Problème de requete sql..nécessité d'une requete récursive?? - SQL/NoSQL - Programmation
Marsh Posté le 25-07-2005 à 09:30:55
Je ne l'ai pas lue en entier mais j'ai trouve sur
http://sqlpro.developpez.com/SQL_AZ_991.html
un truc tres ressemblant
Citation : |
Marsh Posté le 25-07-2005 à 09:37:36
Sous Oracle c'est l'opérateur CONNECT BY PRIOR qu'il faut utiliser
Code :
|
START WITH ne doit pas être obligatoire, ça te permet de commencer la hiérarchie où tu veux.
Un exemple bien connu de cette fonction est la requête de restitution du plan d'exécution qui permet de mettre en page :
Code :
|
Marsh Posté le 25-07-2005 à 10:08:14
j'en profite;
existe t'il un equivalent de ces fonctions sous MYSQL (au vu de la doc je crois pas mais bon...)
Marsh Posté le 25-07-2005 à 10:08:55
ça ne me surprendrait que moyennement
Mais je dois admettre que je ne sais pas
Marsh Posté le 25-07-2005 à 14:43:36
Nope, pas plus que sous SQL Server (grosse lacune d'ailleurs).
Sous SQL Server, on peut s'en tirer avec une PS, pour MySQL, à moins d'avoir la toute dernière version qui supporte aussi les PS, je pense que t'es obligé de passer par du code PHP ou autre.
Marsh Posté le 28-07-2005 à 00:08:41
En fait il doit y avoir 2 écoles :
- ceux qui veulent tout faire en SQL car ils préfèrent
- ceux qui, comme moi, trouvent que ces problèmes sont parfaits à résoudre avec un langage de programation fait pour, sans faire faire tout le travail au SGBD.
A mon avis les 2 avis sont bons, mais à voir niveau rapidité (ce qui doit dépendre de bcp de facteurs).
Marsh Posté le 26-08-2007 à 12:35:38
La création de requêtes récursive à la norme SQL:1999 (WITH RECURSIVE / UNION ALL) existe dans les SGBDR suivants :
IBM DB2 v8 et suivants
SQL Server 2005 (et 2008)
Elle n'existe pas dans les autres SGBDR comme MySQL, Oracle, PostGreSQL, Interbase, FireBird....
Oracle propose CONNECT BY / PRIOR, mais ne peut traiter que le parcours d'arbres par le parcours de graphes. C'est une lacule du moteur Oracle et c'est pourquoi le commité de normalisation de SQL n'a pas retenue la solution de Oracle.
Pour des détails sur les requêtes récursives, vous trouverez bientôt un article complet sur mon site : http://sqlpro.developpez.com (ou http://sql.developpez.com)
Quand à faire cela sur le client, c'est une simple problématique de perf. Sivous avez peu de données et une profondeur de scrutation récursive très faible, c'est faisable. Mais au volume de données ce sera toujours le SGBDR qui gagnera car il optimise et évite les aller et retour entre le serveur et le client.
A +
Marsh Posté le 27-08-2007 à 14:20:39
betsamee a écrit : Je ne l'ai pas lue en entier mais j'ai trouve sur |
Ton site avait déjà été indiqué dès le départ
Très bon article en tout cas
Vu que t'as l'air de t'y connaître bien plus que moi, je te propose de regarder ça :
http://forum.hardware.fr/hfr/Progr [...] 6416_1.htm
Et me dire ce que tu en penses, les erreurs, les trucs à ajouter, etc.
Marsh Posté le 24-07-2005 à 23:52:15
Bonjour,
je suis sous SQL ORACLE
voilà dans ma table T_HISTORIQUE j'ai l'historique des numéros qu'a pris un élément:
table T_HISTORIQUE dont les colonnes sont:
numéro initial "numInit"
numéro final "numFin"
date de changement de numéro "dateChang"
A la création de mon élément, j'insère 0 dans "numéro initial" puis le numéro de mon élément dans "numéro final". Ensuite à chaque modification de numéro j'insère le numéro initial et final dans la table.
Un numéro ne peut etre utilisé qu'une seule fois meme si les éléments sont différents.
Je souhaite écrire une requete qui me ramène pour un dernier numéro final d'un élément donné,
l'ensemble des numéros qu'il a pris, ainsi que les dates de changements!
(il n'y a pas de clé primaire unique qui me permette de tout ramener d'un coup)
Je n'arrive pas à écrire une telle requete!!
j'ai tenté
SELECT T1.numInit, T1.numFin
FROM T_HISTORIQUE T1, T_HISTORIQUE T2
WHERE
T1.numFin = T2.numInit
mais je voudrais aussi mettre la condition que le dernier numéro pris par mon élément soit un paramètre!
Si je peux faire cela en une requete ce serait bien