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 :

Récupérer les libellés


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de Archibald29
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 112
    Points : 131
    Points
    131
    Par défaut Récupérer les libellés
    Bonjour,

    Je ne parviens pas à mettre au point une requête qui doit sans doute être trés simple :

    Je travaille sur 3 tables Athlétes, Compétitions, Résultats.
    J'ai des structures basiques pour tests

    Athletes : aCod, aNom
    Compet. : cCod, cNom
    Resulta. : rCod, rDat, rTim, aCod, cCod

    Je veux extraire le vainqueur de chaque compétition, en indiquant le nom de la compétition, la date, le temps, le nom du vainqueur...

    Je parviens à lister les noms des compétitions, date, et meilleur temps, mais ne trouve pas la solution pour coller à mon résultat le nom de chaque athléte vainqueur.

    Code qui marche pour ajoindre le nom de la compétition aux résultats (3 compétitions, 3 lignes) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select cNom, cDat, min(rTim) from gbe_res
    join gbe_com on gbe_com.cCod=gbe_res.cCod
    group by cNom, cDat
    Bien sûr j'ai fait quelques essais avant de créer ce post.
    Je bute à chaque fois sur le fait que les données apparaissent en de multiples exemplaires.

    J'ai essayé de joindre aNom provenant de la table athléte sous la forme du code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Select cNom, cDat, aNom, min(rTim) from gbe_res r
    join gbe_com c on c.cCod=r.cCod
    join gbe_ath a on a.aCod=r.aCod
    group by cNom, cDat, aNom
    mais là je récupére une dizaine de lignes au lieu des 3 attendues (3 compétitions)
    ....

    Que faut il faire pour adjoindre le nom de l'athléte vainqueur à ce résultat ?
    (je travaille avec local SQL D3 ou FireBird 1.5)

  2. #2
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Points : 318
    Points
    318
    Par défaut
    Essai cette requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT aNom,rDat,rTim,cNom  FROM athletes,compet,resultat WHERE (resultat.aCod=athletes.aCod) and (compet.cCod=resultat.cCod)
    Elle te retourneta le nom de l'athlète le nom de la compétition la date et l'heure
    http://fr.obedev.com/: Un blog sur le développement web et mobile.

  3. #3
    Membre habitué Avatar de Archibald29
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 112
    Points : 131
    Points
    131
    Par défaut Récupérer les libellés d'une 3éme table aprés Min()
    Merci beaucoup de ta réponse, ça fonctionne parfaitement en effet.
    Je cherche également à faire la même opération aprés avoir extrait pour chaque compétition le vainqueur c.a.d celui dont le temps est minimum pour chacune des villes.

    il y a 3 villes la requête décrite dans ma question du haut comme ok me retourne bien 3 lignes lorsque je combine les tables Compétition et Résultat.

    >>> je veux maintenant adjoindre à ces 3 lignes une colonne comportant le nom de l'athléte récupéré dans la table athléte à partir du code aCod qui se trouve dans les tables Athléte et Résultats mais je ne trouve pas la bonne façon de procéder à chaque fois mes trois lignes de vainqueurs deviennent 9 lignes (j'ai 3 athlétes...)

    Comment faire ???

  4. #4
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Points : 318
    Points
    318
    Par défaut
    Je n'ai pas bien compris les relations qui existent entre tes tables ni le problème que tu viens de poser.
    http://fr.obedev.com/: Un blog sur le développement web et mobile.

  5. #5
    Membre habitué Avatar de Archibald29
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 112
    Points : 131
    Points
    131
    Par défaut Structures des tables et résultat souhaité
    Voila la structure des 3 tables utilisées :


    La requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select cNom, cDat, min(rTim) from gbe_res
    join gbe_com on gbe_com.cCod=gbe_res.cCod
    group by cNom, cDat
    Me renvoie le résultat suivant (Vainqueur de chaque compétition) :


    Maintenant je voudrais mettre "en clair" le nom de chaque vainqueur à partir de son code, j'essaye diverses requêtes... dont celle-ci (qui me paraissait bien...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select cNom, aNom, min(Temps) as Mini
    from (Select cNom, cDat, aNom, min(rTim) as Temps
    from gbe_res r, gbe_com c, gbe_ath a
    where c.cCod=r.cCod and a.aCod=r.aCod
    group by cNom, cDat, aNom)
    group by cNom, aNom, Temps
    Mais pas moyen cette requête me retourne ceci :

    c.a.d 12 lignes au lieu des 3 souhaitées...

    J'ai fait diverses tentatives avec having mais un avis éclairé serait une précieuse aide

  6. #6
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Points : 318
    Points
    318
    Par défaut
    Essai cette requête(Je n'arrive pas à la faire on utilisant JOIN). Je ne suis pas sûr que ça marche C'est un peu compliqué.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT aNom,rDat,MIN(rTim),cNom FROM gbes_ath,gbes_com, gbes_res WHERE (gbes_res.aCod=gbes_ath.aCod) AND (gbes_com.cCod=gbes_res.cCod)
    GROUP BY cNom,cDat
    http://fr.obedev.com/: Un blog sur le développement web et mobile.

  7. #7
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Points : 318
    Points
    318
    Par défaut
    Si ça ne marche pas essai cette requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT aNom,rDat,MIN(rTim),cNom FROM gbes_ath,gbes_com, gbes_res WHERE (gbes_res.aCod=gbes_ath.aCod) AND (gbes_com.cCod=gbes_res.cCod)
    GROUP BY cNom,cDat HAVING rtim=MIN(rTim)
    Remarque:Je ne suis pas vraiment fort en SQL.
    http://fr.obedev.com/: Un blog sur le développement web et mobile.

  8. #8
    Membre habitué Avatar de Archibald29
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 112
    Points : 131
    Points
    131
    Par défaut Toujours pas
    La première requête renvoie toujours 12 lignes.
    La seconde un message :
    "invalid expression in having clause : neither an aggregate function nor a part of the group by clause"

    ps : je ne sais pas si tu es trés bon, mais tu es trés persévérant !!!

  9. #9
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Points : 318
    Points
    318
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT aNom,cNom,cDat,min(rTim) FROM gbe_ath
    INNER JOIN (SELECT cNom,cDat,min(rTim),aCod FROM gbe_res JOIN gbe_com ON gbe_com.cCod=gbe_res.cCod GROUP BY cNom,cDat) As resultat
    ON gbe_ath.aCod=resultat.aCod
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT aNom,cNom,cDat,min(rTim) FROM gbe_ath
    INNER JOIN (SELECT cNom,cDat,min(rTim),aCod FROM gbe_res JOIN gbe_com ON gbe_com.cCod=gbe_res.cCod GROUP BY cNom,cDat) 
    USING(aCod)
    http://fr.obedev.com/: Un blog sur le développement web et mobile.

Discussions similaires

  1. [WD15] Récupérer les libellés des interrupteurs cochés
    Par carpe diem dans le forum WinDev
    Réponses: 11
    Dernier message: 19/06/2019, 08h30
  2. Récupérer les mails Outlook dans une table Access
    Par zerrokooll dans le forum VBA Access
    Réponses: 79
    Dernier message: 07/07/2009, 14h22
  3. récupérer les libellés d'une table diverse
    Par AGNESL dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 30/03/2009, 19h49
  4. Réponses: 6
    Dernier message: 01/06/2007, 13h19
  5. Réponses: 4
    Dernier message: 04/07/2003, 19h13

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