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 :

Probleme Requete SQL SELECT


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Probleme Requete SQL SELECT
    Bonjour à tous,

    j'ai besoin d'un coup de main :

    voici les tables :
    COURRIER COURRIER_DESTINATAIRE DESTINATAIRE
    co_id code_destinataire de_id
    co_objet code_courrier de_nom

    COURRIER_EXPEDITEUR EXPEDITEUR
    coex_courrier ex_id
    coex_expediteur ex_nom

    COURRIER_SECRETAIRE SECRETAIRE
    cose_courrier se_id
    cose_expediteur se_nom

    En clair j'ai une table courrier qui peut avoir plusieurs destinataires, plusieurs secretaires et plusieurs expediteurs

    A l'aide d'une requete, je voudrait listeer mes courriers en affichant à chaque fois les destinataires, les expediteurs et les secretaires.

    Courrier1 Expediteur1 Destinataire1 Secretaire1
    Expediteur2
    Expediteur3
    Courrier2 Expediteur1 Destinataire2 Secretaire1
    Destinataire3
    Courrier3 Expediteur1 Dest2 sec2
    etc ....

    MERCI POUR TOUT CAR JE SUIS DANS LA M....

    Pour l'instant je fais un avec un curseur mais ca prend beaucoup trop de temps avec le nombre de courrier ca passe pas.
    Si quelqu'un a une idée. Ca à l'air tellement simple que j'y arrive pas.

  2. #2
    Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Oula
    OULA

    La description n'est tables n'est pas claire, je recommence donc :

    COURRIER
    co_id
    co_nom

    COURRIER_DESTINATAIRE
    deco_destinataire
    deco_courrier

    DESTINATAIRE
    de_id
    de_nom

    COURRIER_EXPEDITEUR
    coex_expediteur
    coex_courrier

    EXPEDITEUR
    ex_id
    ex_nom

    COURRIER_SECRETAIRE
    co_courrier
    sco_secretaire

    SECRETAIRE
    se_id
    se_nom

  3. #3
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    Pourquoi tu ne mets pas les informations secrétaires, destinataires, expéditeurs dans ta table courrier avec leurs clefs??

  4. #4
    Membre régulier Avatar de yoshï
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 206
    Points : 88
    Points
    88
    Par défaut
    +1

    Je ne comprends pas grand chose à ta modélisation.Tes tables ne sont pas liées...Pas étonnant que tu es du mal à écrire ta requête.
    Je te conseil vivement de plancher sur une modélisation type UML avant de te lancer dans l'écriture SQL de ta structure.

    une meilleure modélisation:

    Courrier
    id
    id_destinataire
    id_expediteur
    id_secretaire

    justification (par énumération d'hypothèses):
    un courrier donné doit être rédigé par une unique secrétaire, expédié par un unique expéditeur et reçu par un unique destinataire

    une secrétaire peut rédiger différents courriers, un expéditeur peut expédier différents courriers et un destinataire peut recevoir différents courriers

    Les cardinalités sont donc de la forme
    Secretaire 1-redige->1..* Courrier
    Expediteur 1-expedie->1..* Courrier
    Destinataire 1-reçoit->1..* Courrier

    Dès lors lister les courrier en affichant secretaire,expéditeur et destinataire devient très simple
    select * from Courrier;

    ps: l'id du courrier n'est pas necessaire si tu considère qu'il ne peut pas y avoir dans ta table 2 courriers différents qui ont même secrétaire, même expéditeur et même destinataire. Dans ce cas tu peux former une clé sur les 3 attributs.

    Voila n'hésites pas si tu as des questions.

  5. #5
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Je ne vois pas bien où est le souci dans la modélisation, il y a 4 tables correspondant à des notions distinctes (COURRIER, DESTINATAIRE, EXPEDITEUR et SECRETAIRE), et 3 tables de lien ( COURRIER_DESTINATAIRE, COURRIER_EXPEDITEUR et COURRIER_SECRETAIRE)
    => Un même courrier peut alors concerner plusieurs secrétaires, plusieurs expéditeurs et plusieus destinataires. Oui, peut-être n'y-a-t'il pas besoin de tous ces liens, mais peut-êtrer que si, donc personnellement, je m'estime mal placé pour critiquer le schéma ...

    La seule chose que l'on pourrait trouver à redire est d'avoir créer 3 tables pour des personnes, alors qu'une seule, avec un champ pour la typologie, aurait suffit.

    Par contre, le souci consiste à consolider ces informations par courrier : si tu lis ce post-ci (Sélection multivaluée), tu verras que le problème est relativement complexe et la solution en SQL n'est supporté que par des SGBD puissants (Oracle, SQL server) dans des versions récentes. La solution de passer par une procédure stockée est donc la plus simple en terme de codage. Si tu as des soucis de performances, vérifie que les champs servant aux jointures sont correctement indexés.

  6. #6
    Membre régulier Avatar de yoshï
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 206
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par Xo
    il y a 4 tables correspondant à des notions distinctes (COURRIER, DESTINATAIRE, EXPEDITEUR et SECRETAIRE), et 3 tables de lien ( COURRIER_DESTINATAIRE, COURRIER_EXPEDITEUR et COURRIER_SECRETAIRE)
    Autant pour moi, je n'avais pas vu que les tables courrier_destinataire, courrier_expediteur et courrier_secretaire comportaient la clé de la table courrier (d'où ma reflexion "les tables ne sont pas liées").L'attribut co_id a donc était renommé dans ces trois tables.

    Citation Envoyé par Xo
    => Un même courrier peut alors concerner plusieurs secrétaires, plusieurs expéditeurs et plusieus destinataires. Oui, peut-être n'y-a-t'il pas besoin de tous ces liens, mais peut-êtrer que si, donc personnellement, je m'estime mal placé pour critiquer le schéma ...
    ok si on part de ce principe sa modélisation est correcte.

    Citation Envoyé par Xo
    La seule chose que l'on pourrait trouver à redire est d'avoir créer 3 tables pour des personnes, alors qu'une seule, avec un champ pour la typologie, aurait suffit.
    +1

Discussions similaires

  1. probleme requete sql select
    Par yassin123441 dans le forum C#
    Réponses: 14
    Dernier message: 15/03/2011, 12h14
  2. [POSTGRESQL] Requete SQL SELECT
    Par angusyoung34 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 18/02/2006, 09h30
  3. probleme requete SQL
    Par grochenel dans le forum Langage SQL
    Réponses: 7
    Dernier message: 12/12/2005, 09h26
  4. [MySQL] probleme requete sql et php
    Par digger dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/10/2005, 14h15
  5. probleme requete sql
    Par Shosho dans le forum Langage SQL
    Réponses: 12
    Dernier message: 03/05/2005, 09h25

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