Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/08/2011, 18h12   #1
Invité de passage
 
M M
Inscription : décembre 2009
Messages : 43
Détails du profil
Informations personnelles :
Nom : M M

Informations forums :
Inscription : décembre 2009
Messages : 43
Points : 4
Points : 4
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 :
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 :
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
binbinou69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 18h49   #2
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 445
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 445
Points : 7 532
Points : 7 532
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 20h46   #3
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Au niveau de ceci :
Code :
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 :
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 :
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 )
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 09h26   #4
Invité de passage
 
M M
Inscription : décembre 2009
Messages : 43
Détails du profil
Informations personnelles :
Nom : M M

Informations forums :
Inscription : décembre 2009
Messages : 43
Points : 4
Points : 4
Citation:
Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
Au niveau de ceci :
Code :
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 :
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 :
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 :
1
2
3
 
AND ( tt.etat_traitement=3
 OR tt.etat_traitement=4 )
binbinou69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h49.


 
 
 
 
Partenaires

Hébergement Web