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 :

requete sur plusieurs bases


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Février 2007
    Messages : 97
    Points : 56
    Points
    56
    Par défaut requete sur plusieurs bases
    Bonjour,

    J'ai deux bases dont l'une n'est pas modifiable (ne m'appartient pas).
    Cette dernière contient une table "clients" que je veux exploiter dans ma seconde base.

    Ces clients viennent déposer un produit, j'ai donc, dans ma seconde base une table "depots" qui contient l'id des clients de la première base.

    Bien sûr, un des buts est de pouvoir afficher une liste des objets déposés avec le nom de clients.

    Pour cela, j'ai une boucle qui pour chaque dépot, accède à la seconde base pour en extraire le nom du client. C'est simple mais évidemment très pénalisant en terme de performances.

    Y-a-t-il une solution plus performante et plus élégante?
    Mon idée est de recopier régulièrement la table client de la première base vers la seconde, je pourrais ainsi récupérer toutes mes infos en une seule requête mais je trouve cela tout de même un peu lourdingue.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Et une jointure avec la table clients, ce ne serait pas plus simple ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT d.*, c.NomClient
    FROM tabase.depots d
    INNER JOIN baseclients.clients c ON d.idClient = c.Client_id
    A adapter à la structure de tes tables bien évidemment.

  3. #3
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Février 2007
    Messages : 97
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Et une jointure avec la table clients, ce ne serait pas plus simple ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT d.*, c.NomClient
    FROM tabase.depots d
    INNER JOIN baseclients.clients c ON d.idClient = c.Client_id
    A adapter à la structure de tes tables bien évidemment.
    Si, ça serait la solution idéale si cela fonctionnait avec PostgreSQL

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Autre solution que la boucle :
    Une requête pour extraire tous les id des clients de ta table depot.
    Balayage du résultat et composition d'une chaîne de caractères qui contiendra la liste des id séparés par une virgule.
    Requête sur la base clients :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT IdClient, NomClient
    FROM TableClients
    WHERE IdClient IN (ta_chaine_de_caracteres_composée_plus_haut)
    A adapter selon le langage que tu utilises pour interroger les bases de données et la structure de tes tables.

  5. #5
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Février 2007
    Messages : 97
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Autre solution que la boucle :
    Une requête pour extraire tous les id des clients de ta table depot.
    Balayage du résultat et composition d'une chaîne de caractères qui contiendra la liste des id séparés par une virgule.
    Requête sur la base clients :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT IdClient, NomClient
    FROM TableClients
    WHERE IdClient IN (ta_chaine_de_caracteres_composée_plus_haut)
    A adapter selon le langage que tu utilises pour interroger les bases de données et la structure de tes tables.
    Ha oui, excellente idée! Je teste cela tout de suite. Merci beaucoup

    EDIT: je viens de tester: c'est à la fois simple et très rapide: encore merci!

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

Discussions similaires

  1. Requetes sur plusieurs bases de données
    Par Fala fala dans le forum Langage SQL
    Réponses: 5
    Dernier message: 13/09/2010, 15h48
  2. Requete sur plusieurs bases de donnees
    Par jonathankrief dans le forum Langage SQL
    Réponses: 0
    Dernier message: 03/08/2010, 14h32
  3. Requete sur plusieurs bases distantes
    Par keaton7 dans le forum Débuter
    Réponses: 11
    Dernier message: 27/03/2009, 14h41
  4. requete sur plusieurs bases de données
    Par bankette dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/06/2007, 14h06
  5. Une requete sur plusieurs base
    Par MaitrePylos dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 06/10/2006, 16h11

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