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 :

Requête avec trois tables : doublons dans mes résultats


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Requête avec trois tables : doublons dans mes résultats
    Bonjour à tous.
    Voila j'ai une requête qui me donne des sueurs d'autant plus que je ne suis requête SQL (A part les bases )

    voici mon problème j'ai trois tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    VRP(id,matricule_vrp, region_vrp, nom_vrp)
     
    DEMARQUE(id, #matricule_vrp, date_demarque, type_demarque, px_reel, px_vendu)
     
    RECETTE(id, #matricule_vrp, date_recette, type_recette, montant)
    Je souhaiterais avoir un requête qui m'affiche par VRP et par date les lignes de démarques et les lignes de recettes.
    region_vrp - matricule_vrp - date_demarque - type_demarque - px_reel - px_vendu
    region_vrp - matricule_vrp - date_recette - type_recette - montant - vide
    Le problème c'est que quand je souhaite ajouter les résultats de la table RECETTE, si le VRP a 3 démarques la ligne RECETTE est triplée :
    En bleu mes démarques et en rouge la recette triplée
    02 - 001 - 2014-02-02 - vente - 20 - 18
    02 - 001 - 2014-02-23 - vente - 15 - 10
    02 - 001 - 2014-02-28 - reprise - 50 - 38

    02- 001 - 2014-03-05 - recette - 30
    02- 001 - 2014-03-05 - recette - 30
    02- 001 - 2014-03-05 - recette - 30
    Le résultat que j'aimerais avoir est celui-ci

    02 - 001 - 2014-02-02 - vente - 20 - 18
    02 - 001 - 2014-02-23 - vente - 15 - 10
    02 - 001 - 2014-02-28 - reprise - 50 - 38

    02- 001 - 2014-03-05 - recette - 30
    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 404
    Points
    28 404
    Par défaut
    Pour pouvoir t'aider à corriger ta requête, il faudrait peut-être que tu nous en présentes le code

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour

    Faites un UNION ALL

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Pour pouvoir t'aider à corriger ta requête, il faudrait peut-être que tu nous en présentes le code
    Évidement je suis tête en l'air

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT planninginv.demarque.*, vendors.*, planninginv.demarque.id id_dem,  planninginv.recette.* 
    FROM planninginv.demarque 
    INNER JOIN vendors 
    ON vendors.number = demarque.matr 
    INNER JOIN planninginv.recette 
    ON demarque.matr = recette.matricule
    ORDER BY demarque.matr, demarque.date ASC

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour

    Faites un UNION ALL
    Avec les UNION, ne suis-je pas obligé d'utiliser les mêmes champs de tables sous peine d'erreur ?

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 404
    Points
    28 404
    Par défaut
    Avec UNION, il suffit d'avoir le même nombre de colonnes.

  7. #7
    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 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Et le même type de données pour chaque colonne...

  8. #8
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par ced Voir le message
    Et le même type de données pour chaque colonne...
    Merci demain je vais modifier ma requête avec un CASE pour avoir le même nombre de colonnes dans demarque et recette et je vous dit si ça marche

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    pas besoin d'un CASE !

    Mettez juste un NULL pour la colonne "manquante" dans votre requete avec la table recette :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT id, #matricule_vrp, date_demarque, type_demarque, px_reel, px_vendu
    FROM demarque
    UNION ALL
    SELECT id, #matricule_vrp, date_recette, type_recette, montant, NULL
    FROM Recette
    Je vous laisse adapter la requete à votre besoin précis, en ajoutant notamment la jointure avec la table vendors

  10. #10
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Ça fonctionne avec un UNION ALL merci
    Je vais quand même utiliser un CASE pour optimiser tout ça (dsl aieeeuuuuu lol mais c'est pour le type_demarque)

    Par contre j'ai des résultats bizarres
    Ma console me dit par exemple que montant_recette n'existe pas... et le numéro de région dans la ligne recette n'est pas placé où je souhaite, alors que je l'appelle en php....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT T1.id id_dem, T1.matr matricule_demarque, T1.date date_demarque, T1.type type_demarque, T1.article, T1.px_reel, T1.px_vendu,T3.region 
    FROM demarque T1 
    INNER JOIN vendors T3 
    ON T3.number = T1.matr 
    UNION ALL 
    SELECT T2.id id_rec, T2.matr matricule_recette, T2.date date_recette, T2.type type_recette, T2.montant montant_recette, T3.region region_recette, NULL, NULL   
    FROM recette T2 
    INNER JOIN vendors T3 
    ON T3.number = T2.matr

  11. #11
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 404
    Points
    28 404
    Par défaut
    Ma console me dit par exemple que montant_recette n'existe pas... et le numéro de region dans la ligne recette n'est pas placé où je souhaite, alors que je l'appelle en php....
    Les noms de colonnes retournés par une UNION sont ceux de la première requête et uniquement ceux là. Les alias de colonnes sont donc inutiles sur les SELECT suivants.
    Quant au numéro de région dans la ligne recette, il est placé là où tu l'as mis...
    Si tu formates ta requête de manière à mettre en correspondance les colonnes dans l'ordre où elles sont appelées, tu obtiens cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    T1.id id_dem, T1.matr matricule_demarque, T1.date date_demarque, T1.type type_demarque, T1.article,                 T1.px_reel,               T1.px_vendu, T3.region 
    T2.id id_rec, T2.matr matricule_recette,  T2.date date_recette,  T2.type type_recette,  T2.montant montant_recette, T3.region region_recette, NULL,        NULL
    Donc, montant_recette en correspondance avec article et region_recette avec px_reel. Sans doute pas tout à fait ce que tu souhaites
    Il faudrait peut être que tu recales tes colonnes...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    T1.id id_dem, T1.matr matricule_demarque, T1.date date_demarque, T1.type type_demarque, T1.article, T1.px_reel, NULL montant_recette, T1.px_vendu, T3.region 
    T2.id       , T2.matr                   , T2.date              , T2.type              , NULL      , NULL      , T2.montant          , NULL       , T3.region

  12. #12
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Super merci à vous ! Ce que j'aime bien sur votre forum c'est que vous ne faites pas que donner les réponses vous expliquez clairement !

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

Discussions similaires

  1. Doublons dans le résultat d'une requête avec Entity Framework
    Par tobus2012 dans le forum Entity Framework
    Réponses: 9
    Dernier message: 05/07/2014, 00h33
  2. Une requête qui donne des doublons dans les résultats
    Par HDR_16 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/04/2014, 18h51
  3. Réponses: 2
    Dernier message: 15/02/2014, 22h14
  4. résultats requête avec deux tables
    Par ideal23 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/03/2007, 10h10
  5. [phpMyAdmin] Faire une requête avec trois tables
    Par camzo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 04/12/2006, 22h55

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