Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/08/2011, 11h07   #1
Invité régulier
 
Inscription : décembre 2010
Messages : 36
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 36
Points : 7
Points : 7
Par défaut Requête Récursive / Hiérarchique

Bonjour à tous,


Je travaille sous Oracle 10.g.

J'ai une table qui contient des filtres et trois colonnes disposés comme cela :

Nom_Filtre, Condition, Valeur

Exemple :
CouleurRouge, Couleur, Rouge


jusqu'ici rien de compliqué. Le problème c'est que dans ce filtre on peut trouver un autre filtre "child of" du premier.

Exemple :

CouleurRouge&Vert, Couleur, Vert
CouleurRouge&Vert, IN_Filtre, CouleurRouge


En gros ce que j'aimerais, c'est une requete qui me permette d'afficher le contenu d'un filtre et si jamais ce filtre contient lui même un filtre, d'afficher son contenu. Je sais que ce n'est pas très clair.
Si par exemple, je travailler sur le filtre que j'ai appellé "CouleurRouge&Vert", j'aimerais le résultat suivant :


Nom_Filtre, Condition, Valeur

CouleurRouge&Vert, Couleur, Vert
CouleurRouge&Vert, IN_Filtre, CouleurRouge
CouleurRouge, Couleur, Rouge


J'ai essayé d'utiliser les clauses CONNECT BY sans succès, je ne sais pas bien comment cela fonctionne. Peut etre auriez vous une idée ?

Bonne journée
F.Salenko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 11h38   #2
Membre du Club
 
nancy carina
Inscription : décembre 2010
Messages : 34
Détails du profil
Informations personnelles :
Nom : nancy carina

Informations forums :
Inscription : décembre 2010
Messages : 34
Points : 45
Points : 45
Bonjour,
tu peux tester cette requete
Code :
SELECT nom_filtre, condition, valeur FROM ta_table T1 WHERE EXISTS (SELECT * FROM ta_table T2 WHERE T2.valeur=T1.nom_filtre);
nancy_carina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 11h55   #3
Invité régulier
 
Inscription : décembre 2010
Messages : 36
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 36
Points : 7
Points : 7
Merci pour la réponse mais ca ne fonctionne pas.

Ajouter une condition dans WHERE permet de spécifier la requete mais pas d'afficher une sous requete.
F.Salenko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 12h01   #4
Invité régulier
 
Inscription : décembre 2010
Messages : 36
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 36
Points : 7
Points : 7
Il est possible d'obtenir le résultat que je recher par le biais d'un UNION ALL mais cela suppose que je sache auparavant que les deux informations soient liées.

Code :
1
2
3
4
5
6
7
8
9
SELECT *
FROM filtre f1
WHERE f1.Nom_Filtre = 'CouleurRouge&Vert'
 
UNION ALL
 
SELECT *
FROM filtre f2
WHERE f2.Nom_Filtre = 'CouleurRouge'
Ce que j'aimerais (en quelque sorte) c'est que ca lance cette requete lorsque la valeur IN_filter apparait dans le champ Condition

Avec un "Case When" c'est possible ?
F.Salenko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 12h10   #5
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
et le souci de votre requete, c'est qu'elle n'est valable que pour 2 niveaux hierarchiques, on pourrait penser qu'il puisse en avoir plus non ?

Qu'avez vous testé avec le connect by prior ? Vous pouvez poster la requete ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 14h02   #6
Invité régulier
 
Inscription : décembre 2010
Messages : 36
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 36
Points : 7
Points : 7
J'ai essayé en effet avec CONNECT BY PRIOR mais je n'ai jamais eu de résultats étant donné que je ne sais pas comment cela fonctionne.

Est ce qu'il serait possible d'avoir un exemple ?
F.Salenko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 14h09   #7
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Vous trouverez votre bonheur ici
Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h09.


 
 
 
 
Partenaires

Hébergement Web