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

Requêtes PostgreSQL Discussion :

Affichage de 4 colonnes depuis une seule clé étrangère


Sujet :

Requêtes PostgreSQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Affichage de 4 colonnes depuis une seule clé étrangère
    Bonjour,

    Je cherche à faire la requête pour afficher 4 colonnes depuis une seule clé étrangère.
    Comme rien n'est plus précis qu'un exemple, voici :

    ma table geologie, possède les colonnes suivantes :
    id_site (clé primaire) strati_ancien_phenom strati_recent_phenom strati_ancien_terrain strati_recent_terrain
    PAC0001 CFE
    PAC0002 EOS PCN TME
    PAC0003 EOS PCN TME
    PAC0004 PTS HLC PTS HLC
    PAC0005 HLC PTS HLC

    Ma table ln_stratigraphie possède les colonnes suivantes :
    id_strati (clé primaire) nom_francais
    EOS Eocène supérieur
    CFE Carbonifère
    PCN Pliocène
    PTS Pléistocène supérieur
    HLC Holocène
    TME Trias mésogéen

    Ces 2 tables sont reliées par strati_ancien_terrain --> id_strati et strati_ancien_phenom --> id_strati et strati_recent_phenom --> id_strati et strati_recent_terrain --> id_strati.

    J'aimerais que ma requête me renvoie ça :
    id_site (clé primaire) strati_ancien_phenom strati_recent_phenom strati_ancien_terrain strati_recent_terrain
    PAC0001 Carbonifère
    PAC0002 Eocène Pliocène Trias mésogéen
    PAC0003 Eocène Pliocène Trias mésogéen
    PAC0004 Pléistocène supérieur Holocène Pléistocène supérieur Holocène
    PAC0005 Holocène Pléistocène supérieur Holocène


    Je ne pense pas que ce soit très difficile mais je bloque bêtement...
    Si vous pouvez m'aider, merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Quelles requêtes as-tu déjà essayées ?
    Où est-ce que tu bloques ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select nom_francais
    from ln_stratigraphie left outer join strati_ancien_phenom;
    J'ai qu'une colonne, je voudrais en avoir 4, exactement comme l'exemple que j'ai mis.

  4. #4
    Membre habitué Avatar de GAEREL
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 160
    Points : 147
    Points
    147
    Par défaut
    Salut.

    ta table principale est "geologie". il faut donc commencer par un select sur celle-ci.

    Ensuite le LEFT OUTER JOIN se fait sur ta table secondaire (join sur une table, pas sur une colonne comme ton exemple) en indiquant comment faire le lien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ... FROM table_principale LEFT OUTER JOIN table_secondaire ON table_principale.cle_etrangere = table_secondaire.cle


    Tu n'es pas loin de la solution...

  5. #5
    Membre habitué Avatar de GAEREL
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 160
    Points : 147
    Points
    147
    Par défaut
    essayes déjà de faire une seule jointure externe correcte (left outer join)
    on compliquera ensuite avec les 3 autres.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci, avec cette piste j'obtient 2 colonnes, comme ci-dessous :
    id_site nom_francais
    PAC0001
    PAC0002 Eocène supérieur
    PAC0003 Eocène supérieur
    PAC0004 Pléistocène supérieur
    PAC0005

    Ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select geologie.id_site, ln_stratigraphie.nom_francais
    FROM geologie
    	left outer join ln_stratigraphie on ln_stratigraphie.id_strati = geologie.strati_ancien_phenom
    order by geologie.id_site;

  7. #7
    Membre habitué Avatar de GAEREL
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 160
    Points : 147
    Points
    147
    Par défaut
    Très bien. On continue.

    Pour faire plusieurs jointures sur la même table (ton cas) il va falloir utiliser des alias pour différencier les 4 utilisations de ta table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT ...
    FROM table_principale TP  <-- ceci (TP) est un alias
       LEFT OUTER JOIN table_secondaire TS1 ON TP.cle_etrangere1 = TS1.cle_primaire
       LEFT OUTER JOIN table_secondaire TS2 ON TP.cle_etrangere2 = TS2.cle_primaire
      etc..
    A toi de jouer...

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Formidable, je ne connaissais pas du tout cette utilisation des alias !

    Donc ma requête me renvoie bien ce que je veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select TP.id_site, TS1.nom_francais, TS2.nom_francais, TS3.nom_francais, TS4.nom_francais
    FROM geologie TP
    	left outer join ln_stratigraphie TS1 on TS1.id_strati = TP.strati_ancien_phenom
    	left outer join ln_stratigraphie TS2 on TS2.id_strati = TP.strati_recent_phenom
    	left outer join ln_stratigraphie TS3 on TS3.id_strati = TP.strati_ancien_terrain
    	left outer join ln_stratigraphie TS4 on TS4.id_strati = TP.strati_recent_terrain
    order by TP.id_site;
    Bonne journée !

  9. #9
    Membre habitué Avatar de GAEREL
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 160
    Points : 147
    Points
    147
    Par défaut
    A toi aussi.

    Juste pour info : tu mets ce que tu veux comme alias... pour faciliter la lecture
    dans ton cas j'utiliserais : "geologie G", "ln_stratigraphie " S1, S2, etc..

    n'oublies pas de cliquer sur "résolu !"

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

Discussions similaires

  1. Mise à jour d'une seule colonne depuis une table existante
    Par marc73450 dans le forum Requêtes
    Réponses: 4
    Dernier message: 29/04/2013, 11h14
  2. Réponses: 6
    Dernier message: 12/03/2007, 13h02
  3. Afficher plusieur colonnes sur une seule colonne ?
    Par Interruption13h dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/02/2007, 16h57
  4. [VBA] Fusionner plusieurs colonnes en une seule
    Par brutos2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/01/2006, 14h25
  5. [SGBD] affichage d'image jpeg depuis une base mysql
    Par eric_300 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/09/2005, 12h27

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