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 :

Créer une requête avec jointure qui renvoie un seul résultat de la table jointe


Sujet :

Langage SQL

  1. #1
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut Créer une requête avec jointure qui renvoie un seul résultat de la table jointe
    Bonjour,

    je possède 2 tables sur lesquelles je fais une jointure (OUTER JOIN)

    la première table est la table de résultats des courses : TABLERESULT
    IDX (index entier autoincrémenté)
    DATE (date de la course )
    VOITURE (numero de la voiture du gagnant)
    LIEU(lieu de la course)
    DISTANCE(distance de la course)


    la deuxième table contient les locations des voitures TABLELOC
    IDX (index entier autoincrémenté)
    DATE (Date de début de la location)
    VOITURE (numero de la voiture)
    PILOTE (Nom du pilote)
    SCORE (points du pilote)
    sur cette table il existe un indexe unique sur les colonnes DATE et VOITURE (1 voiture ne peux pas etre attribuée 2 fois pour une journée)


    Je veux afficher un tableau qui donne un resultat comme celui ci :

    DATE VOITURE PILOTE LIEU DISTANCE
    01/01/2013 VL1 NOM1 LIEU1 DISTANCE1
    02/01/2013 VL2 NOM1 LIEU2 DISTANCE2

    Je précise que parfois une voiture est louée pour une période de 1mois et on n'a pas la date de fin de loc, mais seulement la date de début de location au prochain locataire.

    Pour l'instant je fait un TABLERESULT avec une OUTER JOIN sur TABLELOC et la condition de jointure est TABLERESULT.VOITURE=TABLELOC.VOITURE AND TABLERESULT.DATE>=TABLELOC.DATE
    Le problème c'est que parfois j'ai le resultat du vrai locataire mais en plus il y a une seconde ligne qui se créée pour ajouter le locataire suivant alors que lui,n'est pas le gagnant ....

    comment faire pour limiter le retour de la TABLELOC à un seul résultat pour la jointure?
    je ne vois pas, j ai probablement trop le nez dans le guidon pour y arriver là....

    merci par avance pour votre aide
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2015
    Messages : 90
    Points : 98
    Points
    98
    Par défaut
    Bonjour !

    Je ne sais pas si cela est possible dans votre cas, mais il serait préférable de revoir le schéma des tables pour de :

    1 - éviter les redondances
    2 - faciliter vos requêtes


    Sinon, je pense qu'utiliser rownum = 1 avec un order by date devrait pouvoir répondre à vos attentes ! :-)

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Votre souci vient du fait que vous ne bornez pas correctement la période de location il faut vérifier que la période de location couvre la date de la course en tenant compte de la date de fin de location.
    La solution dépend de la façon dont vous implémentez les dates de fin quand la période n'est pas fermée : avez vous une date positionnée à l'infini (9999-12-31), à une autre date, à null ?...

    Par contre, pourquoi faire une jointure outer ? si une voiture a couru, c'est bien qu'elle est forcément attribuée à un pilote, donc une jointure inner suffit
    Vous devriez éviter les mots réservés pour la définition de vos objets, la colonne "DATE" devrait être renommée
    De plus, c'est quoi la colonne score dans la table des locations ?
    Enfin choisir un index unique sur date+voiture vous interdit de gérer des courses par équipe, comme les courses d'endurance où plusieurs pilotes se relaient dans la même voiture pour la même course.
    Attention donc à ce choix restrictif.

  4. #4
    Membre actif
    Avatar de katanaenmousse
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 220
    Points : 232
    Points
    232
    Par défaut
    Bonjour
    En fait les données existent déjà et sans fin de location et elles me sont livrées sans que je puisse les changer
    Mais c'est bon ça fonctionne
    Après le left outer join je précise le critère de jointure comme étant le numéro de voiture et une date que j obtient par un select en la filtrant dans la table par un where qui me garde la plus récente des dates de location de cette voiture inférieure à la date de début de la course
    En gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select * FROM TABLERESULT LEFT OUTER JOIN TABLELOC
    ON TABLERESULT.VOITURE=TABLELOC.VOITURE 
    AND TABLERESULT.DATE=SELECT MAX (DATE) FROM TABLELOC 
    WHERE (TABLERESULT.VOITURE=TABLELOC.VOITURE  AND TABLERESULT.DATE>=TABLELOC.DATE)
    Voila merci à tous !
    KatanaEnMousse
    Une fois qu'une réponse qui vous convient a été trouvée à votre sujet, pensez à le mettre en résolu.

Discussions similaires

  1. Une requête en JOINTURE qui renvoi plusieurs arrays
    Par Magnat dans le forum Requêtes
    Réponses: 7
    Dernier message: 10/05/2010, 23h03
  2. requête avec jointure qui renvoie des résultats bizarres
    Par Canari74 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 20/05/2008, 02h13
  3. Créer une requête avec variable d'une inputbox
    Par Elias Farks dans le forum VBA Access
    Réponses: 4
    Dernier message: 14/02/2008, 17h08
  4. [ABAP] Comment créer une requête avec jointure
    Par roadster62 dans le forum SAP
    Réponses: 1
    Dernier message: 21/02/2006, 16h04
  5. optimisation d'une requête avec jointure
    Par champijulie dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 07/07/2005, 09h45

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