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 :

Requête multitables, quelle jointure ?


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Juin 2008
    Messages : 171
    Points : 65
    Points
    65
    Par défaut Requête multitables, quelle jointure ?
    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 :
    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';
    Résultat obtenu :
    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.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 135
    Points : 164
    Points
    164
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT distinct T.*,D.libelle
    FROM Travail T LEFT OUTER JOIN Document D ON (T.ordre=D.ordre)
    WHERE T.jour='20100312' AND T.personnel='00001';

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Le distinct cache souvent des problèmes. Probablement qu'il sera mieux de l'appliquer avant la jointure.
    Mais, quelle est le résultat attendu si dans la table Document vos donnés sont:
    Exemple Document :
    123 123456 libelle1
    124 123456 libelle100
    125 123456 libelle11000
    126 123457 libelle2

  4. #4
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Juin 2008
    Messages : 171
    Points : 65
    Points
    65
    Par défaut Requête multitables, quelle jointure ?
    Bonjour,

    Effectivement nous allons avoir des problèmes.
    Je vais revoir ma copie.
    Merci Mnitu.

    Merci Teach pour le DISTINCT.

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

Discussions similaires

  1. Requête avec une jointure multitables
    Par thefleo dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/02/2009, 09h07
  2. [Data] Requête multitable : quelle possibilité ?
    Par robert_trudel dans le forum Spring
    Réponses: 6
    Dernier message: 22/04/2008, 15h37
  3. Requête avec auto jointure récalcitrante
    Par vmolines dans le forum Langage SQL
    Réponses: 15
    Dernier message: 30/03/2006, 21h31
  4. [MySQL] Erreur SQL 1064 : Requête imbriquée avec jointure !
    Par patchankito dans le forum Langage SQL
    Réponses: 5
    Dernier message: 31/01/2006, 10h37
  5. [Conseils] Vue plutôt qu'une requête de multi-jointures
    Par etiennegaloup dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/11/2005, 17h51

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