IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

[SQL2000]Requête récursive difficile


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut [SQL2000]Requête récursive difficile
    Bonjour

    Je patauge un peu dans ma réflexion, certainement par manque d'habitude.
    Voici mon problème : je dois mettre en place une requête récursive (je suis pas sûr du bon emploi du mot) pour trouver des zone géographique avec des zones parentes.
    Je m'explique : j'ai une table avec un id_zone, un nom_zone, un type_zone et une id_zone_parent. Donc, dans cette table j'ai des pays, des régions et des départements. Il faudrait que je puisse metre au point un requête qui va me chercher tous les départements et mettant 'France' au départ (donc 95 résultats) ou tous les départements en mettant 'Bretagne' au départ (donc 4 résultat, malheureusement!).

    Et je trouve pas le moyen de faire ça. Je patauge total avec les inner join sur la même table, j'arrive pas à les mettre en place.

    Pouvez vous m'aider ?

    Kenavo

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Par défaut
    En fait, pour résoudre ton soucis, il y a une méthode employée par beaucoup. Dans ce genre de problème on utilise plusieurs tables.

    - PAYS (idPays,Libelle)
    - REGION (idRegion, Libelle, IdPays)
    - DEPARTEMENT (idDepartement, Libelle, idRegion)
    - VILLE (idVille, Libelle, idDepartement)

    Ensuite on monte une procédure stockée qui exécute une requête dynamique en fonction de la valeur de recherche, du type racine et du type Résultat.

    Exemple
    France, Pays, Departement
    Bretagne, Region, Departement

    Je pense que cette piste t'aidera à la résolution de ton soucis.

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide.

    L'ennui c'est que je viens de faire exactement le contraire. J'avais plusieurs tables, mais je dois tout remettre dans la même table.

    Enfait, je m'aperçois que j'ai oublié de donner un détail : à la fin c'est une lsite de commune que je dois remonter, sachant que, aprés mes départements, j'ai rentré mes arrondissments, puis mes communes, toujours avec un principe de id_zone_parent.

    Donc en tapant 'France' j'ai 36683 résultats et en tapant 'Morbihan', j'ai 628 résutat. En fait tout le souci est là.
    Avec l'histoire de plusisuers table je dois préparer pas mal de requête ou d'option dans une proc stock pour gérer cela de la même manière. Et encore en plus, les utilisateurs vont définir des zones eux même en prenant des système de zone parente.

    Conclusion, c'est vraiment une requête récursive qu'il me faut. un collègue de boulot m'en avait fait une un jour, mais c'était il y a longtemps (5 ans pour être exact) et je n'ai plus de contact avec lui.

    en tout cas merci pour ton aide.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Par défaut CTE
    Les CTE et la recursivite des requetes sous sql serveur n'existe qu'à partir de sql serveur 2005.
    pour faire de l'autojointure, tu dois utiliser un langage de programmation comme vb.net pour programmer ta recursivite ou passer à la representation intervallaire.

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Bon, ben c'est pas réjouissant tout ça.
    Pour mon pote qui m'avais fait ça, c'était sous SQL 2000.

    Bon c'est pas grave, comme je ne m'en souviens pas bien, c'est peut être qu'on fini par laisser tomber.

    Maintenant ça me fais un argument supplémentaire pour passer à SQL 2005. Sinon, je vais programmer.

    Encore merci

  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 142
    Par défaut
    Pour ce qui est de l'auto-jointure, tu peux le gérer directement en SQL.
    En admettant que tu aies une table décrivant la structure suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    test (pk int,
    champs varchar(50),
    fk int REFERENCES test(pk))
    alors les autojointures se réalisent simplement à l'aide d'alias, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT champs FROM test t1
    INNER JOIN test t2 ON t1.fk = t2.pk
    WHERE t2.champs='texte'
    Par contre, pour ce qui est de la récursivité, en effet, je vois mal comment on pourrait faire sans un langage autorisant les boucles de type while.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête récursive dans access
    Par Australia dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 29/07/2014, 15h15
  2. Réponses: 4
    Dernier message: 04/05/2006, 19h01
  3. [SQL Server]Problème avec une requête récursive
    Par evans dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/04/2006, 20h16
  4. [SQL Server] Requête récursive
    Par margagn dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/04/2006, 04h31
  5. Requête récursive
    Par tirixil dans le forum Bases de données
    Réponses: 3
    Dernier message: 07/03/2005, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo