|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Olivier Albertini Inscription : avril 2006 Messages : 194 ![]() |
Bonjour,
je voudrais sélectionner par rapport à une liste d'élément les bouts de banche par exemple pour un élément je dois faire : Code :
mais si j'ai 2,4,6 et je voudrais récupérer leur bout de branche comment je fais ? je peux faire une une requête dynamique avec une boucle pour chaque élément mais si j'ai une liste de 100 éléments la boucle risque d'être lourde... Avez vous une idée ? Ma table possède aussi le LEVEL de l'élément voici le récap de la table T_ARBO_PLN : PLN_ID PLN_BG PLN_BD LEVEL |
||
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
par level tu entend le niveau de ta ligne dans l'arbre ?
Si c'est le cas il faudra tester la non existence d'un niveau strictement supérieur (ou inf je ne sais pas comment tu as modélisé). |
|
|
00
|
|
|
#3 | |
|
Membre régulier
![]() Olivier Albertini Inscription : avril 2006 Messages : 194 ![]() |
Citation:
je l'ai modélisé par le cours de SQLpro donc de cette maniere (représentation graphique) http://sqlpro.developpez.com/cours/arborescence/ je vois pas le test à faire... |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
hmm ok,
c'est plus simple que ca. Dans votre arbre les feuilles semblent être reconnu via la condition suivante : PLN_BD - PLN_BG = 1 Par contre, ceci sera faux si quand vous supprimer des lignes de votre arbre vous ne réordonnancé pas vos plage gauche / droite. |
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() Olivier Albertini Inscription : avril 2006 Messages : 194 ![]() |
![]() Si ma requête possède les id suivants: (sélect id from x ) id libelle 01 aérien 02 marin je veux avoir comme résultat : ( sélect id as boutdebranche from t_arbo where id in (sélect id from x) and ... (des trucs qui vont récupérer les bouts de branches de ces id) planeur, parachute, hélico, fusée, ULM, civil, touriste, militaire, voilier, paquebot, planche à voile J'arrive pas à trouver .... |
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Alors, je ne comprend pas ce que vous voulez pour 2 raisons :
- votre schéma diffère de celui donné dans l'exemple. En effet vos table ont des colonnes supplémentaires et vous disposez de table qui ne sont pas indiqué dans l'exemple de sql pro. - Il manque un petit jeu de donnée pour comprendre vos interaction entre vos tables Donc je ne pige que dalle à votre exemple, et vu que j'ai un rhume ca n'arrange pas les choses :p Donnez un petit jeu de donnée (en entrée) + résultat attendu et ca devrait le faire. |
|
|
00
|
|
|
#7 |
|
Membre régulier
![]() Olivier Albertini Inscription : avril 2006 Messages : 194 ![]() |
J'ai changé le post du haut...
J'espère que c'est plus clair |
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Dans votre exemple, votre 1ere requête ramène transport, aérien, marin.
transport englobe tout l'arbre, est-ce normal que vous ne vouliez pas les bouts d'arbre qui se rattachent à terrestre ? Je ne vois pas la logique la dedans. Vous ne voulez que les bouts d'arbre des résultats à partir du 2eme niveau (si transport est le niveau 1) ? |
|
|
00
|
|
|
#9 |
|
Membre régulier
![]() Olivier Albertini Inscription : avril 2006 Messages : 194 ![]() |
Arf, je suis null, je rectifie mon erreur... Il n'y a pas transport ! Je veux retourner tous les bouts de branches des id que me ramène la requête donc s'il retourne transport alors il retournera tous les bouts de branches en effet
|
|
00
|
|
|
#10 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Ok, j'ai compris, vous n'étiez pas loin de la solution.
Code :
vos différents ID, ou par une sous-requete. |
||
|
|
00
|
|
|
#11 | ||
|
Membre régulier
![]() Olivier Albertini Inscription : avril 2006 Messages : 194 ![]() |
Code :
|
||
|
00
|
|
|
#12 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
moins de page fault ?
dans ma requête je fais un select *, si vous ne mettez que l'id du plan (pas besoin du distinct en plus) c'est toujours le cas ? J'ai un gros doute quand même, au niveau de la rapidité d'execution, car votre requête inclu 2 distincts. Du moins sur db2 l'optimizer me sort un plan d'acces plus rapide, apres sur sql serveur c'est peut etre différent. sinon niveau indexation, j'ai testé de cette maniere : template index sur l'id T_ARBO_PLN index sur id, pln_bg, pln_bd Je n'ai pas modélisé votre 3eme table ne sachant pas ce qu'il y avait dedans. |
|
|
10
|
Copyright © 2000-2012 - www.developpez.com