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

Requêtes MySQL Discussion :

Jointure et Distinct


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 47
    Par défaut Jointure et Distinct
    Bonjour à tous et à toutes,

    J'ai un petit problème de requête, j'ai 2 tables : une qui affiche le code et libellé du produit et l'autre qui affiche différents prix suivant une date pour un code produit.

    J'essaye en vain de faire une jointure me permettant d'afficher le dernier prix de l'article.

    voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT p.CODE_PRODUIT, p.LIBELLE_PRODUIT, MAX(pr.DATE_PRIX), pr.PRIX_KILO, pr.CODE_PRIX
    FROM produit AS p
    INNER JOIN prix AS pr ON pr.CODE_PRODUIT = p.CODE_PRODUIT
    Group by CODE_PRODUIT 
    ORDER BY CODE_PRODUIT
    L'erreur de cette requête est qu'elle m'affiche bien 1 seul code produit avec la date_Prix la plus récente, mais elle m'affiche le prix qui correspond à une autre date...
    j'ai essayé avec distinct mais ça change rien.

    Savez vous comment je peux changer la requête pour avoir le résultat non corrompu ? Voyez-vous une erreur dans ma requête?

    Merci par avance.

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    C'est un problème poser ici de façon récurrente.
    Il faut t'inspirer de cette source.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 063
    Par défaut
    Bonjour,

    C'est une question souvent posée...
    Essaie avec la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT p.CODE_PRODUIT, p.LIBELLE_PRODUIT, pr1.PRIX_KILO, pr1.CODE_PRIX
    FROM produit AS p
    INNER JOIN prix AS pr1 ON pr1.CODE_PRODUIT = p.CODE_PRODUIT
    INNER JOIN prix AS pr2 ON pr2.CODE_PRODUIT = pr1.CODE_PRODUIT
    GROUP BY p.CODE_PRODUIT, p.LIBELLE_PRODUIT, pr1.PRIX_KILO, pr1.CODE_PRIX
    HAVING pr1.DATE_PRIX = MAX(pr2.DATE_PRIX)
    A tester, c'est écrit sans aucune vérification...

    Une autre façon de faire serait d'adapter la requête présentée dans les codes sources MySQL : http://mysql.developpez.com/telechar...aque-categorie

    [EDIT] Argh, grillé en rapidité de réponse
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 47
    Par défaut
    Un grand merci à vous 2.

    Cela fait un moment que je cherche et j'étais vraiment en peine.
    Je n'avais pas trouvé la source de ton lien.

    Donc j'ai utilisé le lien de ta source et j'ai modifié ma requete comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT
    p.CODE_PRODUIT, p.LIBELLE_PRODUIT, pr.DATE_PRIX,pr.PRIX_KILO, pr.CODE_PRIX
    FROM produit p
    INNER JOIN
    prix pr ON p.CODE_PRODUIT = pr.CODE_PRODUIT
    WHERE (
    SELECT COUNT(*)
    FROM prix p1
    WHERE p1.CODE_PRODUIT = pr.CODE_PRODUIT
    AND p1.DATE_PRIX > pr.DATE_PRIX
    ) < 1
    la requête me renvoit le bon prix de chaque produit, c'est parfait.

    encore merci à vous, vous m'avez bien débloqué.

    <edit> pour Ced j'ai testé ta méthode, elle fonctionne également mais j'ai du rajouter pr1.DATE_PRIX sur le premier select sinon j'avais une erreur mysql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT p.CODE_PRODUIT, p.LIBELLE_PRODUIT, pr1.PRIX_KILO, pr1.CODE_PRIX, pr1.DATE_PRIX
    FROM produit AS p
    INNER JOIN prix AS pr1 ON pr1.CODE_PRODUIT = p.CODE_PRODUIT
    INNER JOIN prix AS pr2 ON pr2.CODE_PRODUIT = pr1.CODE_PRODUIT
    GROUP BY p.CODE_PRODUIT, p.LIBELLE_PRODUIT, pr1.PRIX_KILO, pr1.CODE_PRIX
    HAVING pr1.DATE_PRIX = MAX(pr2.DATE_PRIX)

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

Discussions similaires

  1. Distinct ne fonctionne plus lors de jointures
    Par theclem35 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 19/04/2012, 19h28
  2. Aide requête jointure et distinct
    Par Anatol75 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 29/12/2010, 00h59
  3. Jointure et DISTINCT
    Par fefe69 dans le forum Requêtes
    Réponses: 3
    Dernier message: 07/09/2009, 11h33
  4. Réponses: 0
    Dernier message: 01/07/2008, 14h32
  5. Distinct sur jointure ineficace
    Par javaboy dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 27/06/2007, 14h59

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