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 :

Associer plusieurs résultats d'une autre table


Sujet :

Requêtes PostgreSQL

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Associer plusieurs résultats d'une autre table
    Bonjour,

    Je suis néophyte en SQL.
    Mon problème est le suivant :
    J'ai une table "customer" avec customerid, firstname, lastname....
    J'ai une deuxième table "customerinfo" avec customerid, infotype, infovalue

    Exemple :
    Customer
    customerid firstname lastname
    1001 Jim Morrison
    1002 Jimi Hendrix

    Custmerinfo
    customerid infotype infovalue
    1001 AS 0601xxxxxx
    1001 ES jim.morrison@rock.star
    1001 AD 01/01/1947
    1001 AX test
    1001 ES jim.morrison@rock.star
    1002 AS 0738xxxxxx
    1002 ES jimi.hendrix@rock.star
    1002 AD 02/02/1947

    J'aimerai obtenir une seule ligne par individu avec le n° de portable (infotype ='AS') et son e-mail (infotype='ES') (si renseigné bien évidemment), style :
    customerid firstname lastname email phonecell
    1001 Jim Morrison jim.morrison@rock.star 0601xxxxxx
    1002 Jimi Hendrix jimi.hendrix@rock.star 0738xxxxxx

    Merci de votre aide.
    Bien cordialement

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Le modèle EAV est très flexible en écriture, mais très peu en lecture.
    En fait il reste performant pour accéder aux données d'une entité, mais nettement moins pour plusieurs.

    Pour votre besoin, vous devez pivoter les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select c.customerid, c.firstname, c.lastname
         , max(case when ci.infotype='ES' then ci.infovalue end) as email
         , max(case when ci.infotype='AS' then ci.infovalue end) as phonecell
      from Customer c
      join Custmerinfo ci on ci.customerid = c.customerid
     group by c.customerid, c.firstname, c.lastname

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup, cela fonctionne parfaitement.
    En plus, vous venez de faire découvrir que cela s'appelait le modèle EAV.

    Cordialement

Discussions similaires

  1. affichage de plusieurs résultats d'une même table
    Par tiomil60 dans le forum Requêtes
    Réponses: 4
    Dernier message: 13/09/2012, 16h46
  2. Réponses: 2
    Dernier message: 13/04/2012, 20h18
  3. Réponses: 1
    Dernier message: 10/11/2008, 17h09
  4. Réponses: 7
    Dernier message: 30/01/2008, 17h39
  5. Réponses: 9
    Dernier message: 28/08/2007, 10h38

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