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

SQL Oracle Discussion :

Jointure de 3 tables


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 43
    Par défaut Jointure de 3 tables
    Bonjour,

    j'ai 3 table:
    planning_taches,plan_taches,traitements
    plannings_taches à ID_plan_taches et plan_taches à ID_traitement.

    dans plan_taches y a une colonne personnes.id_personnes.

    j'ai fait 2 requêtes pour récupérer les personnes., le résultat est différents ,j'aimerai avoir un peu d'aide pour différencier les 2 et choisir la bonne.

    REQUETE1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select distinct pt.personnes_id 
    from planning_taches plt 
    INNER JOIN plan_taches pt
     ON plt.plan_taches_id=pt.id 
    INNER JOIN traitements tt
     ON  pt.traitements_id=tt.id 
    where plt.fait='F'
     and plt.annulation='F'
     and plt.retrait='F'
     and plt.report='F' 
     and tt.etat_traitement=3
     or tt.etat_traitement=4 
    order by pt.personnes_id ;
    REQUETE2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select pt.personnes_id 
    from planning_taches plt, plan_taches pt, traitements tt 
    where plt.plan_taches_id=pt.id
     and pt.traitements_id=tt.id
     and plt.fait='F'
     and plt.annulation='F'
     and plt.retrait='F'
     and plt.report='F' 
     and tt.etat_traitement=3
     or tt.etat_traitement=4;
    merci d'avance

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    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 138
    Par défaut
    Je ne vois pas de différence fondamentale entre ces deux requêtes, aussi bien au niveau des critères de jointure que des critères de sélection, à la clause ORDER BY près.

    Ce serait vraiment étonnant qu'il y ait une différence entre les lignes retournées
    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
    Invité
    Invité(e)
    Par défaut
    Au niveau de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WHERE plt.plan_taches_id=pt.id
     AND pt.traitements_id=tt.id
     AND plt.fait='F'
     AND plt.annulation='F'
     AND plt.retrait='F'
     AND plt.report='F' 
     AND tt.etat_traitement=3
     OR tt.etat_traitement=4
    Peut-être que des parenthèses pourraient aider...
    Version 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WHERE ( plt.plan_taches_id=pt.id
     AND pt.traitements_id=tt.id
     AND plt.fait='F'
     AND plt.annulation='F'
     AND plt.retrait='F'
     AND plt.report='F' 
     AND tt.etat_traitement=3 )
     OR tt.etat_traitement=4
    ou Version 2
    Version 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WHERE plt.plan_taches_id=pt.id
     AND pt.traitements_id=tt.id
     AND plt.fait='F'
     AND plt.annulation='F'
     AND plt.retrait='F'
     AND plt.report='F' 
     AND ( tt.etat_traitement=3
     OR tt.etat_traitement=4 )

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 43
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Au niveau de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WHERE plt.plan_taches_id=pt.id
     AND pt.traitements_id=tt.id
     AND plt.fait='F'
     AND plt.annulation='F'
     AND plt.retrait='F'
     AND plt.report='F' 
     AND tt.etat_traitement=3
     OR tt.etat_traitement=4
    Peut-être que des parenthèses pourraient aider...
    Version 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WHERE ( plt.plan_taches_id=pt.id
     AND pt.traitements_id=tt.id
     AND plt.fait='F'
     AND plt.annulation='F'
     AND plt.retrait='F'
     AND plt.report='F' 
     AND tt.etat_traitement=3 )
     OR tt.etat_traitement=4
    ou Version 2
    Version 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WHERE plt.plan_taches_id=pt.id
     AND pt.traitements_id=tt.id
     AND plt.fait='F'
     AND plt.annulation='F'
     AND plt.retrait='F'
     AND plt.report='F' 
     AND ( tt.etat_traitement=3
     OR tt.etat_traitement=4 )
    Je vous remercie, la solution est là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AND ( tt.etat_traitement=3
     OR tt.etat_traitement=4 )

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

Discussions similaires

  1. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 15h50
  2. [jointure]requete possible de double jointure entre 2 tables
    Par akira_le_gaucher dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/05/2004, 16h03
  3. jointure sur TROIS tables
    Par caribou_belle dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/03/2004, 12h20
  4. Jointure entre 2 tables et OR
    Par PyRoFlo dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/02/2004, 19h42
  5. Jointure sur 2 tables de bases différentes
    Par Celina dans le forum Langage SQL
    Réponses: 10
    Dernier message: 10/11/2003, 12h56

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