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 :

SELECT avec une relation réflexive


Sujet :

Langage SQL

  1. #1
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut SELECT avec une relation réflexive
    Bonjour,

    Ma BDD gère les POSTE informatique de CLIENT répartis dans une hiérarchie de GROUPE (+sous groupes = GROUPE).
    En gros, un groupe peut avoir 0,n groupes et chaque client a 1,n groupes (avec un seul groupe de niveau 1).
    Voici ma base test :
    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
    CREATE TABLE "CLIENT" (
        "id" INTEGER  PRIMARY KEY ,
        "nom" VARCHAR(50)  NOT NULL );
     
    CREATE TABLE "GROUPE" (
        "id" INTEGER  PRIMARY KEY ,
        "nom" VARCHAR(50)  NOT NULL ,
        "id_client" INTEGER ,
        "id_groupe_parent" INTEGER );
     
    CREATE TABLE "POSTE" (
        "id" VARCHAR(38)  NOT NULL  UNIQUE ,
        "nom" VARCHAR(16)  NOT NULL ,
        "datetime_cnx" TIMESTAMP );
     
    ALTER TABLE "GROUPE" ADD FOREIGN KEY ("id_client") REFERENCES "CLIENT" ("id");
    ALTER TABLE "POSTE" ADD FOREIGN KEY ("id_groupe") REFERENCES "GROUPE" ("id");
    ALTER TABLE "GROUPE" ADD FOREIGN KEY ("id_groupe_parent") REFERENCES "GROUPE" ("id");
    Ci-dessous, ma requête actuelle qui ne gère pas les "sous-groupe" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT
    	C.nom AS C_nom,
    	G.id AS G_id, G.nom AS G_nom,
    	P.id AS P_id, P.nom AS P_nom
    FROM
    	POSTE AS P, GROUPE AS G, CLIENT AS C 
    WHERE
    	C.id = G.id_client AND
    	P.id_groupe = G.id
    L'idéal serait d'avoir ce genre de résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Client-1, G1, Ordinateurs, P1, Poste-1
    Client-1, G1, Ordinateurs, P2, Poste-2
    Client-2, G2, Ordinateurs, P3, Poste-12
    Client-2, G2, Ordinateurs, P4, Poste-22
    Client-2, G3, Comptabilité, P5, Poste-3
    Client-2, G3, Comptabilité, P6, Poste-4
    Client-2, G3, Comptabilité, P7, Poste-5
    Client-2, G4, Facturation, P8, Poste-6
    Client-2, G4, Facturation, P9, Poste-7
    et... pour finalement générer un tableau avec ruptures du genre :
    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
    + Client-1
    	+ G-Ordinateurs
    		Poste-1
    		Poste-2
    + Client-2
    	+ G-Ordinateurs
    		Poste-12
    		Poste-22
    		+ G-Comptabilité
    			Poste-3
    			Poste-4
    			Poste-5
    		+ G-Facturation
    			Poste-6
    			Poste-7
    Quelle méthode me permettrait cela ?
    Merci pour votre aide !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour, regardez du côté des requêtes récursive : http://sqlpro.developpez.com/cours/s...te-recursives/

  3. #3
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    ok....

    Je vais essayer... mais ça va être dur
    merci punkoff

  4. #4
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    évidemment je n'y arrive pas.
    Pourriez-vous m'aider un petit peu plus SVP ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Où bloquez-vous ?

    Il faut partir de votre requete que vous avez deja posté.

    La récursion se fera entre cette requête et les tables groupes + postes

    Postez vos essais

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/07/2011, 17h42
  2. Réponses: 3
    Dernier message: 25/06/2008, 15h21
  3. [Debutant] Modèlisation, agrégation avec une relation n:m
    Par etiennegaloup dans le forum Schéma
    Réponses: 15
    Dernier message: 08/08/2006, 12h58
  4. Requête selection avec une variable de date
    Par kahmsin dans le forum Access
    Réponses: 7
    Dernier message: 20/11/2005, 19h38
  5. [TTable] Pb avec une relation maitre-detail
    Par kase74 dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/10/2005, 10h34

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