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

Modélisation Discussion :

Jointure 3 tables: lignes doublons [AC-2010]


Sujet :

Modélisation

  1. #1
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut Jointure 3 tables: lignes doublons
    Bonjour,

    Débutant en Access j'ai quelques problèmes à réaliser un travail.

    Je créé une requête à partir de 2 tables afin d'avoir une requête contenant la date, l'annéee, le mois, le nom de la machine, le nom du produit, la quantité produite et le déchet.
    Jusque la pas de problème.
    Je souhaiterai avoir le nombre d'heures de travail en plus dans ma requête.
    Pour cela je choisi une 3eme table que je lie à l'une des 2 tables par le nom du produit (clé primaire). Le problème est que lorsque je lance ma requête j'ai toutes les lignes qui apparaissent en doublons.

    Je ne sais pas quoi faire et m'en remet à vous pour m'aider.

    Merci d'avance!

  2. #2
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    John Parker,

    Bonjour

    Difficile de répondre à frois à ta question car tellement de choses peuvent expliquer ce phénomène....

    Nous allons donc procéder aux contrôles de rigueur avant intervention de l'équipe chirurgicale...


    Pour cela je choisi une 3eme table que je lie à l'une des 2 tables par le nom du produit (clé primaire). Le problème est que lorsque je lance ma requête j'ai toutes les lignes qui apparaissent en doublons.
    1. Peut t-il y avoir plusieurs entrées dans la table 3 concernant le même produit (dans ce cas rien d'étonnant), le group by solutionnerait t-il en cas ce problème (si pour chaque référence la valeur est différente : Non.

    2. Dans le même ordre d'idée peut t-il y avoir plusieurs entrées dans la table 2 concernant le même produit (si le group by a été activé sur ce cas tu n'a peut être rien vu) ?

    3. La clé de chaque table est t-elle bien référencée (tu ne te serais pas tromper en faisant ta jointure ?)

    Dans l'attente de tes réponses

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  3. #3
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Bonjour Jimbolion,

    Merci pour ta réponse. Je fais ma jointure sur le code article (nom du produit). Cette variable se trouve dans les 3 tables et un code est unique. Lorsque je lie ma 3eme table contenant les heures à l'aide de ce code produit j'ai beaucoup de doublons au niveau des productions et déchets. Cependant dans ces doublons, les valeurs de la colonne "heure machine" est différente.

    Je ne sais pas si ça peut aider à comprendre.

    En tout cas merci pour ton aide

  4. #4
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    John Parker,

    Si ta jointure est bien faite ce dont je ne doute pas et que la valeur dans ta table code article est unique, c'est qu'il y a nécessairement plusieurs entrées pour un même code article dans ta table 3 (qui contient les heures) et cela me semble tout à fait cohérent.

    Maintenant quel est l'intérêt de faire une jointure sur la table 3 (vérifier qu'il y a bien eu une heure, retourner la somme des heures travaillées ?)
    Donc le comportement de la requête est tout à fait normal (ce qui aurait été anormal c'est qu'elle ne te retourne qu'une ligne).

    Prenons l'exemple suivant Mr X dans la table parents à 2 fils dans la table enfant. En créant une jointure avec n entrées dans la table enfants il est normal que la requête me retourne 2 enregistrements : Mr X et jean + Mr X et louis. Avec 4 enfants je retourne 4 lignes.

    Si je veux une seule ligne avec 2 enfants je demande un compte et du coup me X avec une seule ligne et une valeur = 2.

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  5. #5
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Jimbolion,

    Que veux-tu dire par "plusieurs entrées". Il est vrai qu'un code article peut être utilisé plusieurs fois dans des numéros de série différentes. Il faut voir le n° de série comme une famille et le code article comme une sous famille.
    Mon but est de savoir combien il y a eu d'heure de travail pour l'article X du lot Y. En gros ma requette contient Date, n° de série, article, quantité produite, déchet, heures de production de ce produit.

    Encore merci de prendre le temps de m'aider

  6. #6
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    John Parker,

    si tu as un code (appelons le n) qui est inscrit 1 fois dans la table 1, 2 fois dans la table 2 et trois fois dans la table 3 et que tu ne fais pas de regroupements la requête te renverra 6 lignes puisque la jointure se fait sur toutes les entrées.

    En regroupant les valeurs uniques (regroupement) et en faisant des sommes tu peux réduire le nombre de lignes.

    Imagines le cas suivant :

    1 article (table 1)
    2 saisies d'hoaraires (table 2)

    cela te retourne 2 lignes : logiques !

    En faisant un regroupement sur la ligne 1 (exemple code produit) et une somme sur la table 2 : la reqêute te renverra qu'une seule ligne avec regroupement sur le code et le total des heures de la table 2

    Regarde un peu du côté des tutos comment on réalise une requête avec regroupement.... ta réponse est là bas

    Si malgré tout, tu n'y arrives pas envoie moi un exemple de ta base (requête + tables et exmeple précis) et on pratiquera la fameuse opération chirurgicale...

    JimBoLion

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  7. #7
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Bonjour jimbolion,

    Je viens de tester quelque chose. J'ai fais plusieurs liaisons de ma table 3 (des heures), à ma table principale. J'ai ainsi relié par la date, le nom de la machine et le code produit de sorte à avoir plusieurs filtres.

    Ca à l'air de marcher mais est-ce une solution "propre"?

    Merci d'avance

  8. #8
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    John Parker,

    Ca à l'air de marcher mais est-ce une solution "propre"?
    Il ne faut pas que l'air, y a t-il la musique ?

    La requête te renvoie t-elle les bonnes valeurs dans tous les cas ?

    En reliant sur des champs date et nom de machine tu as effectivement rompu les jointures initialement prévues. Cela fonctionne et peut répondre à ton problème. Cela risque d'impacter les performances en cas de grosse volumétrie de la base. J'aurai préféré un regroupement, les filtres restent utilisables si non affichés dans le résultat.

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  9. #9
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Merci pour ta réponse.
    En fait ça ne fonctionne pas si bien que ça, j'ai un champs en plus dans ma requete qui est un code me permettant d'identifier le déchet de la "bonne production". Du coup j'ai une double ligne pour un numéro de série + produit.

    Je m'explique: imaginons que je sorte ma requête pour le 21/02/2014.
    Pour le numéro de série 14/0000, produit E532 j'ai produit 500 kg de bons et 30 kg de déchet, le tout en 3h
    J'aurais dans ma requête 2 lignes, une avec mes 500 kg de bons pour 3h de production et une seconde avec mes 30 kg de déchet

    Du coup, comme je relie la table des heures en fonction de la date, du numéro de série et de l'article j'ai dans ma requête une première ligne avec la date, ce numéro de série, ce code produit, mes 500 kg dans une colonne "Premier choix" que j'ai rajouté et 3h de fonctionnement machine.
    J'ai dans ma seconde ligne la date, ce numéro de série, ce code produit, mes 30kg de déchet dans une colonne "Déchet" que j'ai rajouté et 3h de fonctionnement machine.
    J'ai par conséquent 6h de fonctionnement machine pour 530kg de production au lieu des 3h...

    Et je ne sais pas comment éviter cela...

  10. #10
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    John Parker,

    Dans ce cas il ne suffit pas d'additionner mais de calculer une moyenne dans la fonction de regroupement (la moyenne de 3 + 3 sur 2 lignes est bien égal à 3).

    Peux tu éventuellement m'envoyer un exemple de ta base avec tes requêtes, et sur un exemple précis sur lequel tu coinces...

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  11. #11
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Bonjour,

    Je vais tester en faisant un group by sur mes dates, numéro de série, article et code (bon ou déchet), ensuite je ferai la moyenne pour les heures.

    Si je n'y arrive pas je t'envoie le fichier. Le problème c'est que c'est une grosse base de donnée en italien et que je ne suis pas sensé avoir la "main" dessus... Mais si je n'y arrive pas je te ferai une reproduction avec un jeu de donnée bidon

  12. #12
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    John Parker,

    Oui une copie des tables dans une nouvelle base avec quelques enregistrements matérialisant un mauvais comportement du résultat sera parfait.
    Inutile de recréer tous les champs (tes trois tables avec les champs exprimés dans ta requête suffisent).
    Tu n'as peut être pas besoin de faire une copie d'ailleurs de la base.. tu crées les tables, les champs, leur mise en relation... ta requête, le mauvais comportement et l'expression du besoin (ce que tu devrais obtenir).

    On valide un principe, pas un dysfonctionnement.

    Si çà fonctionne pour 10 enregistrements, çà fonctionnera pour 1000 (juste le temps de réponse...)

    pour l'italien (malgré mes origines), il est vrai que je suis pas le plus doué. Malgré tout un chat est un chat, donc par ricochet un champ est un champ.

    Dans l'attente de ta réponse

    Bonne journée

    Jim1boLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  13. #13
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Re,

    Je viens de te faire un jeu de donnée "bidon", traduit en français

    Tu trouveras dans la requête (Ligne 1 et 2, ainsi que la 4 et la 5) mon problème.

    Merci d'avance pour ton aide!

  14. #14
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Voici le ficheir joint
    Fichiers attachés Fichiers attachés

  15. #15
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    John Parker,

    Alors concrètement j'ai pour l'article A1 5 enregistrements en production

    A1,"Bon",100
    A1,"Dechet",10
    A1,"Dechet",20
    A1,"Bon",50
    A1,"Bon",25

    Qu'attends tu réellement dans l'affichage de ta requête ?

    A1,205 (correspondant je suppose à la quantité totale pour la machine A1 (faut t-il regrouper ces données sur machine et/ou série ?)

    ou

    L1,S1,A1,205 ou autre réponse ?

    Suivant ta réponse les requêtes de regroupement seront différentes :

    Donc sans regroupement par série :

    Nom : Capture_2.JPG
Affichages : 289
Taille : 43,6 Ko

    Donc regroupement avec série :

    Nom : Capture_1.JPG
Affichages : 288
Taille : 55,1 Ko

    La base ici avec exemples concrets :

    Test.zip

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  16. #16
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    En fait j'ai besoin d'avoir une repartition des heures par ligne. Je pense que c'est le plus simple. De cette façon j'ai bien, pour une date, une série et un article, la quantité de "bon", de déchet, et le nombre d'heure. ce serait l'idéal.

    Après j'aimerai bien voir ce que ça peut donner si on regroupe que par numéro de série.

    En tout cas je te remercie vraiment pour ton aide. C'est super sympa!

  17. #17
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    John Parker,

    A partir des exemples fournis qu'est ce que attends de ta requête... un exemple s'il-te-plait

    un petit tableau avec ce que tu souhaites en sortie et chaque ligne serait apprécié, après pour le reste j'analyse et mets en forme...

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  18. #18
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Jimbolion,

    Je t'ai fais un fichier excel dans lequel tu verras le résultat souhaité.

    D'avance, merci
    Fichiers attachés Fichiers attachés

  19. #19
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    John Parker,

    Je m'occupe de toi dans le courant de L'après-Midi. J'ai quelques sujets sur le feu, et notamment professionnels.

    Il y a plusieurs façons d'aborder ta problématique, je vais faire çà de la manière la plus simple possible... de façon à ce que tu comprennes le cheminement. Mais d'abord et avant d'être sûr de ma requête, peux tu me signifier le nombre d'enregistrements par table.. (souci de performance)

    Je crains que ton modèle à la base ne soit bon, il faut utiliser des identifiants et tables de jonction... mais bon ce sera un deuxième sujet sur le forum

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  20. #20
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Aucun soucis, je patiente.

    Pour la table "production" j'ai 6300 lignes et pour la table "Heure" 4800.

    Je t'aiderai bien pour tes urgences mais si c'est du Access tu es bien meilleur que moi

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL-5.1] Jointure en éliminant les doublons d'une des tables
    Par nazguhl dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/11/2014, 14h12
  2. Jointures sur table de liaison (n-n) renvoie des doublons
    Par MICHEL_R dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2008, 14h34
  3. jointure sur des lignes d'une même table
    Par elsa_dach dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/01/2007, 12h08
  4. [Ligne doublon] Elimination
    Par Ekros dans le forum Requêtes
    Réponses: 9
    Dernier message: 04/11/2005, 15h28
  5. requete(jointure 2 tables) qui marche pas
    Par DaxTaz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2004, 17h50

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