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 :

Table de données chaînée ?


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Table de données chaînée ?
    Bonjour

    J'ai la table suivante:
    id
    nom
    id_next

    Comment récupérer mes données dans l'ordre de manière à ce que le premier résultat soit celui dont l'id n'est jamais dans la colonne id_next, puis le second celui indiqué par la colonne id_next du premier, etc ?

    Par exemple, les valeurs sont:
    1, nom1, 2
    2, nom2, 4
    3, nom3, 5
    4, nom4, 3

    je voudrais obtenir:
    nom1
    nom2
    nom4
    nom3

    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Points : 70
    Points
    70
    Par défaut
    Quelque chose de ce goût là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT nom
    FROM TA_TABLE
    WHERE id NOT IN id_next
    UNION
    SELECT nom
    FROM TA_TABLE
    WHERE id IN id_next
    ORDER BY id;

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Il vous faut faire une requête récursive :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    ;WITH CTE AS(
    	SELECT	
    			0 AS Rang
    		,	TRef.nom
    		,	TRef.id_next
    	FROM	T TRef
    	LEFT OUTER JOIN T TPrecedent
    		ON		TPrecedent.id_next = TRef.id
    	WHERE	TPrecedent.id IS NULL
     
    	UNION ALL
     
    	SELECT 
    			Rang + 1
    		,	TSuivant.nom
    		,	TSuivant.id_next
    	FROM	CTE
    	INNER JOIN T Tsuivant
    		ON		TSuivant.id = CTE.id_next
    )
    SELECT		nom
    FROM		CTE
    ORDER BY	Rang

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour les réponses. J'ai biaisé en utilisant une boucle, mais je vais regarder ces solutions.

Discussions similaires

  1. Réponses: 8
    Dernier message: 19/01/2006, 18h16
  2. Réponses: 2
    Dernier message: 11/01/2006, 11h54
  3. Tables avec données temporelles
    Par blins dans le forum Oracle
    Réponses: 12
    Dernier message: 12/12/2005, 09h50
  4. Réponses: 9
    Dernier message: 07/10/2004, 19h41
  5. [QuickReport] Données d'une table et données calculées
    Par poufouille dans le forum Bases de données
    Réponses: 11
    Dernier message: 30/03/2004, 16h01

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