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

 PostgreSQL Discussion :

PGSql - Récupération du résultat d'une interrogation de 2 tables avec une association 0,n - 1,1


Sujet :

PostgreSQL

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut PGSql - Récupération du résultat d'une interrogation de 2 tables avec une association 0,n - 1,1
    Bonjour,

    Prenons un exemple bateau pour illustrer. J'ai 2 tables comme suit:
    table Client
    - id (clé primaire)
    - nom
    - prénom
    - adresse
    - téléphone

    table Commande
    - id (clé primaire)
    - id_client (clé étrangère, je vous laisse deviner sur quoi!)

    Avec l'association un client a 0 à n commande, et une commande n'est associée qu'à un seul client.

    La question est: quelle est la meilleure façon de récupérer, par exemple tous les clients dont le nom commence par 'a' (histoire de dire seulement certains clients), et la liste de leurs commandes. Attention, le résultat doit inclure les clients qui n'ont pas passé de commande. Donc exit un simple "select * from client, commande where client.id = commande.id_client and nom like 'a%'".

    En l'état de mes connaissances en SQL, je vois 2 solutions:
    - une fonction PGSql qui retourne la liste des clients qui vont bien, et une fonction PGSql qui retourne, pour un id de client, la liste des ids de commande. Le gros problème étant que ça va exécuter plein de petits select sur la DB. pas glop.
    - une fonction PGSql qui retourne la liste des clients qui vont bien, et une fonction PGSql qui retourne la liste des commandes pour tous ces clients avec une requête du style "select commande.* from client, commande where client.id = commande.id_client and nom like 'a%'. Inconvénient: on interroge 2x la table client pour en récupérer les mêmes enregistrements... c'est pas super optimisé.

    Je pense ne pas me tromper en disant que ces 2 solutions ne sont vraiment pas terribles, et donc je patoge un peu!

    Any idea?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 134
    Par défaut
    Et les jointures externes, ça sert à quoi alors ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  *
    FROM    client
        LEFT JOIN
            commande
            ON  client.id = commande.id_client 
    WHERE   client.nom LIKE 'a%'
    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
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut
    Merci, je vais étudier ça en détail. J'avais bien précisé "En l'état de mes connaissances en SQL" Je n'ai pas la prétention de tout savoir, d'où ma question!

    Merci encore

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonsoir,

    J'avais bien précisé "En l'état de mes connaissances en SQL"
    Cela n'empêche en rien d'effectuer des recherches

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2011
    Messages : 54
    Par défaut
    Tout à fait! Mais mes recherches ne donnaient rien de pertinent, je me rends compte que je n'utilisais pas les bons mots-clé. Je ne suis pas du genre à me jeter sur un forum pour poser une question

    Je passe le thread en résolu!

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

Discussions similaires

  1. [MySQL] Résultat insuffisant pour la différence deux dates avec une requête mysql
    Par onesat dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/08/2014, 13h14
  2. Réponses: 0
    Dernier message: 11/02/2009, 18h09
  3. Interroger TOUTES les tables d'une DB
    Par tout est vide dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/11/2008, 19h26
  4. Interroger le serveur OLAP avec une application java
    Par bena.habib dans le forum Autres outils décisionnels
    Réponses: 0
    Dernier message: 16/06/2008, 19h09
  5. Réponses: 4
    Dernier message: 23/10/2006, 09h09

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