Bonjour,
Je travaille sur une 11g sous RedHat 5.2.
J'ai une table Travail (15000 enr/jour, 3 mois glissant)
personne char,
action varchar,
ordre varchar,
jour date,
heure char
Et une table Document (400000 enr/annee, 2 ans glissant)
id_doc varchar,
ordre varchar, (Il y a un index sur ordre)
libelle varchar
Je cherche la requête me permettant d'afficher toutes les lignes de Travail pour un jour donné et une personne donnée, avec en plus le libelle d'ordre(par rapport au champ ordre).
J'ai vu que avec LEFT OUTER JOIN je peux avoir toutes les lignes de Travail même si il s'agit d'un travail sans ordre ou si l'ordre n'existe pas dans Document.
Problème, dans Document, je peux avoir plusieurs milliers de documents avec le même ordre. Par conséquent le LEFT OUTER JOIN me duplique plusieurs milliers de fois le résultat d'une ligne.
Exemple Travail :
00001 840841842843 123456 20100312 080000
00001 840841842844 123457 20100312 083000
00001 840841842845 20100312 084500
Exemple Document :
123 123456 libelle1
124 123456 libelle1
125 123456 libelle1
126 123457 libelle2
Requête :
Résultat obtenu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT T.*,D.libelle FROM Travail T LEFT OUTER JOIN Document D ON (T.ordre=D.ordre) WHERE T.jour='20100312' AND T.personnel='00001';
00001 840841842843 123456 20100312 080000 libelle1
00001 840841842843 123456 20100312 080000 libelle1
00001 840841842843 123456 20100312 080000 libelle1
00001 840841842844 123457 20100312 083000 libelle2
00001 840841842845 20100312 084500
Résultat souhaité :
00001 840841842843 123456 20100312 080000 libelle1
00001 840841842844 123457 20100312 083000 libelle2
00001 840841842845 20100312 084500
J'espère être clair.
Merci pour les réponses.
Partager