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 :

Une seule ou plusieurs jointures


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2013
    Messages : 71
    Points : 36
    Points
    36
    Par défaut Une seule ou plusieurs jointures
    Bonjour ;
    voilà les tables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create table piece (id_piece number primary key, libelle_piece varchar2(20),id_modele number references modele (id_modele), prix_piece number,id_lot number references lot (id_lot))
     
    create table appareil (id_appareil number primary key, description_appareil varchar2(30), num_serie varchar2(30),id_modele number references modele (id_modele), prix_achat number, id_lot number references lot (id_lot),id_etat references etat (id_etat))
     
    create table rechange (id_rechange number primary key, id_piece number references piece (id_piece),id_appareil number references appareil (id_appareil), date_envoie_rechange date,date_retour_rechange date, montant_rechange number,description_rechange varchar2(20))
    besoin : je dois créer une procédure qui permet de calculer le coût de rechange d'un modèle donné en paramètre de la procédure.
    ma question : est ce qu'il faut faire deux requete , la 1ère en joignant la table RECHANGE avec PIECE et ainsi prendre l'id modele de la piece.
    la 2eme en joignant la table RECHANGE avec APPAREIL et ainsi prendre l'id modèle de l'appreil.
    ensuite faire la somme des deux résultat pour obtenir le coût de rechange pour un modèle.
    est ce que c'est comme ça qu'il faut faire pour répondre au besoin ?
    MErci

  2. #2
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Si le résultat est obtenable en une seule requête pourquoi vouloir en faire deux ?

    Y'a même pas besoin de procédure, une vue devrait suffire.
    Si c'est juste pour accéder en lecture à des données, sans rien écrire nul part, ca ne sert à rien de faire une procédure.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2013
    Messages : 71
    Points : 36
    Points
    36
    Par défaut
    c'est boligatoire , je dois utiliser une procédure qui affiche par dbms le cout de rechange pour un modele.
    comme la table piece et Appreil contiennt toutes les deux une clé étrangère ID_Modele ; donc pour calculer le cout de rechange pour un modele il faut voir les piece et les appareil qui ont ce modele , c'est pourquoi je crois qu'il faut utiliser deux requête

  4. #4
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Citation Envoyé par otmaneo01 Voir le message
    c'est pourquoi je crois qu'il faut utiliser deux requête
    Soit y'a qlq chose que je ne comprends pas dans votre model, soit vous vous compliquez la vie pour rien...
    Le truc, c'est que vous essayez de sortir une information pour une ligne, alors qu'il faut pensez ensembliste. Faire une vue vous permettrait par exemple de récupérer le cout de rechange de tous vos modèle à la fois, et selectionner sur cette vue seulement le modèle qu'il vous faut simplifiera beaucoup les choses. Quitte à ce que vous la selectionnez via votre proc pour faire un DBMS (output?) dessus.

    Est ce que cette requêtes ne correspondrait pas à votre besoin ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select A.id_modele
    ,SUM(C.montant_rechange) as montant_rechange
    FROM	piece A
    INNER JOIN appareil B ON A.id_modele = B.id_modele
    INNER JOIN rechange C ON A.id_piece = C.id_piece and B.id_appareil = B.id_appareil
    WHERE A.id_modele = 'XXXXX' --mettez le code du modèle que vous cherchez
    Si ca ne correspond pas, il faudrait alors que vous publiez un jeu de test je pense.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2013
    Messages : 71
    Points : 36
    Points
    36
    Par défaut
    Oui c ça en faite je savais pas bien m'exprimer , je voulais dire est ce que j'aurais besoin de joindre les deux tables pièce et appareil et j'ai dit deux requête, une seule question pourquoi dans netbeans j'ai toujours besoin de @@ DELIMITER pour créer une procedure ?!

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2013
    Messages : 71
    Points : 36
    Points
    36
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select A.id_modele
    ,SUM(C.montant_rechange) as montant_rechange
    FROM	piece A
    INNER JOIN appareil B ON A.id_modele = B.id_modele
    INNER JOIN rechange C ON A.id_piece = C.id_piece and B.id_appareil = B.id_appareil
    WHERE A.id_modele = 'XXXXX' --mettez le code du modèle que vous cherchez
    je ense qu'il faut mettre un C au lieu du B en rouge

  7. #7
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Oui, vous avez bien corrigé
    B->C

    Après, concernant Netbeans, si je considère basiquement que vous êtes en train d'intégrer votre code SQL dans du JAVA (ou peut etre un autre langage) c'est à voir avec ce langage comment récupéré le résultat d'une requete.
    C'est genre, la base en PHP, ca doit etre tout aussi faisable dans un autre langage. Donc, vous n'avez vraiment pas besoin de passer par une procédure pour récupéré votre valeur. Une simple requete devrait suffir, mais si vous n'y arrivez pas, il faut aller voir du coté du forum JAVA (ou autre langage)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/05/2013, 18h47
  2. Une seul machine - plusieurs instances apache
    Par kalibo1 dans le forum Apache
    Réponses: 3
    Dernier message: 16/06/2011, 00h03
  3. Une seule table plusieurs sous-requêtes
    Par mbeernow dans le forum Requêtes
    Réponses: 5
    Dernier message: 16/09/2010, 10h51
  4. Réponses: 2
    Dernier message: 12/11/2008, 20h08
  5. Réponses: 2
    Dernier message: 10/07/2004, 18h14

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