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

Langage SQL Discussion :

[SQL Server]Problème avec une requête récursive


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 55
    Points : 43
    Points
    43
    Par défaut [SQL Server]Problème avec une requête récursive
    Bonjour,

    Je viens de débuter dans le développement de requêtes récursives sous MS SQL Server 2005. J'ai un petit problème avec celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    WITH Predecesseurs (No_fils, Pred) 
    AS
        (SELECT No_elem_fils, CAST(No_elem_pere AS VARCHAR(MAX))
        FROM   Preseances
        UNION  ALL
        SELECT arrival.No_elem_fils, '''' + cast(departure.Pred AS VARCHAR(MAX)) + ''', ''' + 
    			cast(arrival.No_elem_pere as varchar(max)) + ''''
        FROM   Preseances AS arrival
               INNER JOIN Predecesseurs AS departure
                     ON departure.No_fils = arrival.No_elem_fils
    	WHERE  departure.Pred NOT LIKE '%' + arrival.No_elem_pere + '%')
     
    SELECT *
    FROM   Predecesseurs
    WHERE no_fils = '4'
    Ceci me donne comme résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    No_fils       Pred
    4	            1    
    4	            2    
    4	            '2    ', '1    '
    4	            '1    ', '2    '
    Et j'aimerais que ma requête récursive me donne quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    No_fils       Pred
    4	           '1    ', '2    '
    Ma table est constituée d'éléments dont chacun (sauf ceux de départ) a des prédecesseurs qui doivent être complétés avant d'arriver à celui-ci. Ma requête récursive me permet de lister ces prédecesseurs.
    Alors, aurai-je mal utilisé le principe de récursivité ou mon CTE est-il mal fait ?

    Merci d'avance,

    Évans

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Tu peux essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    WITH Predecesseurs (No_fils, Pred) 
    AS
        (SELECT No_elem_fils, CAST('' AS VARCHAR(MAX))
         FROM   Preseances
         WHERE No_elem_pere IS NULL
        UNION  ALL
         SELECT arrival.No_elem_fils, departure.Pred  + ', ''' +
             cast(arrival.No_elem_pere as varchar(max)) + ''''
        FROM   Preseances AS arrival INNER JOIN Predecesseurs AS departure
                                             ON departure.No_fils = arrival.No_elem_pere)
     
    SELECT *
    FROM   Predecesseurs
    WHERE no_fils = '4'
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 55
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    Je viens d'essayer la section de code que vous m'avez envoyer, mais il me retourne rien.

    J'ai peut-être oublié un détail concernant ma requête récursive, en fait ce que je voudrais pouvoir faire c'est lui envoyer un numéro d'élément fils et que celle-ci me liste les éléments prédécesseurs (pères) de celui-ci. Ma table est constitué comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    No_elem_pere      No_elem_fils
    	 1    	         3
    	 1    	         4
     	2    	         4
     	2    	         5
    Merci,

    Évans

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Normal que ma requête ne ramène rien :
    Ma table est constituée d'éléments dont chacun (sauf ceux de départ) a des prédecesseurs
    Dans ma table j'ai donc un enregistrement (1, NULL) qui exprime que 1 n'a pas de prédécesseur.


    Avec les données suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Fils   Père
    4      2
    2      1
    1      NULL
    4      3
    3      1
    j'obtiens les résultats suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Fils   Prédecesseurs
    4      , '1', '3'
    4      , '1', '2'
    Il y a une vilaine virugule en trop, mais ce n'est pas trop grave
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

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

Discussions similaires

  1. Problème avec une requête dans SQL-Server
    Par krolis dans le forum Développement
    Réponses: 6
    Dernier message: 09/01/2011, 21h53
  2. [SQL] Problème avec une requête sql
    Par bodysplash007 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 11/05/2007, 17h30
  3. [SQL] Problème avec une requête
    Par jcmskip dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/04/2007, 11h41
  4. [MySQL] Problème avec une requête SQL
    Par chobol dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 11/05/2006, 12h29
  5. [VB]Problème avec une requête SQL
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 18/03/2006, 17h47

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