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 :

Requête SQL sur 2 tables


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Requête SQL sur 2 tables
    Bonjour,

    Voici mes 2 tables :

    *Table COL_APP:
    -----------------

    CAP_TYP CAP_CODE CAP_APP
    UF 6006 GP
    UF 1100 GP
    UF 1100 GF
    UF 1100 RH
    UF 1100 AG
    UF 6006 RH
    UF 6006 AG
    UF 6006 GF

    *Table COL_DOM:
    -----------------

    CDM_CODE CDM_LIB
    RH Ressources Humaines
    GP Gestion des Patients
    GF Gestion Financière
    AG Analyse de Gestion
    CO Domaine Commun


    J'aimerais une requête qui me donne le résultat suivant :

    1100 "Ressources Humaines,Gestion des Patients,Gestion
    Financière,Analyse de Gestion"

    6006 "Ressources Humaines,Gestion des Patients,Gestion
    Financière,Analyse de Gestion"


    En fait je cjercje mais sans succès. En fait ce que je veux c'est pour chaque CAP_CODE trouvé dans la table COL_APP que ça me renvoir les libéllés concaténés correspondants de la table COL_DOM.

    Merci à tous.

  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,

    quel est votre sgbd ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par punkoff Voir le message
    bonjour,

    quel est votre sgbd ?

    C'est ORACLE

  4. #4
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut,

    Toute une palette de solutions, en fonction de la release de ton Oracle :
    http://www.oracle-base.com/articles/...techniques.php

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Je ne sais pas si j'ai bien compris, mais je ferais la jointure entre les deux tables par les deux colonnes (CAP_APP = CDM_CODE).
    La solution est écrite en mysql (fais tes changements pour oracle)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT CAP_CODE, (
    	SELECT GROUP_CONCAT( CDM_LIB ) 
    	FROM COL_DOM CD, COL_APP CA
    	WHERE CA.CAP_APP = CD.CDM_CODE
    	  AND CA.CAP_CODE = PCA.CAP_CODE) AS NEW_COLUMN
    FROM COL_APP PCA

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 104
    Points : 31 548
    Points
    31 548
    Billets dans le blog
    16
    Par défaut
    Une solution avec jointure récursive.

    Pour y voir plus clair, on peut commencer par créer une vue de jointure des tables COL_APP et COL_DOM :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE VIEW APP_DOM (CAP_CODE, CDM_CODE, CDM_LIB)  AS
        SELECT CAP_CODE, CDM_CODE, CDM_LIB
        FROM   COL_APP AS x JOIN COL_DOM AS y ON x.CAP_APP = y.CDM_CODE ;

    On utilise maintenant une jointure récursive à l’aide d’une CTE (Common Table Expression) :

    Code SQL : 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
    WITH CHAINE (CAP_CODE, CDM_CODE, CONCATENATION, NbElem) AS
    (
        SELECT x.CAP_CODE, x.CDM_CODE, CAST(x.CDM_LIB AS VARCHAR(MAX)), 1 
        FROM   APP_DOM AS x JOIN 
                               (
                                   SELECT CAP_CODE, MIN(CDM_CODE) AS CDM_CODE
                                   FROM   APP_DOM 
                                   GROUP BY CAP_CODE
                               ) AS y
                    ON x.CAP_CODE = y.CAP_CODE AND x.CDM_CODE = y.CDM_CODE
      UNION ALL
        SELECT x.CAP_CODE, y.CDM_CODE, CONCATENATION + ' ; ' + y.CDM_LIB, NbElem + 1     
        FROM   CHAINE AS x JOIN APP_DOM AS y ON x.CAP_CODE = y.CAP_CODE
                                AND x.CDM_CODE < y.CDM_CODE
    )
    SELECT x.CAP_CODE, CONCATENATION
    FROM   CHAINE AS x JOIN 
                      (SELECT CAP_CODE, MAX(NbElem) AS MaxNbElem
                       FROM   CHAINE
                       GROUP BY CAP_CODE) AS y
                    ON x.CAP_CODE = y.CAP_CODE AND x.NbElem = y.MaxNbElem ;
    =>
    CAP_CODE    CONCATENATION
    --------    ------------------------------------------------------------------------------------
    6006        Analyse de gestion ; Gestion financière ; Gestion des patients ; Ressources humaines
    1100        Analyse de gestion ; Gestion financière ; Gestion des patients ; Ressources humaines 

Discussions similaires

  1. [SQL] Problème avec script de pagination et requête sql sur deux tables
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h06
  2. problème de requête SQL sur 3 tables pour un while
    Par carmen256 dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/04/2006, 16h55
  3. requêtes sql sur plusieurs tables
    Par zahiton dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/11/2005, 10h59
  4. [SQL] requêtes SQL sur plusieurs tables
    Par zahiton dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/11/2005, 16h32
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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