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 :

Doublon multiple alors qu'il n'existe pas


Sujet :

Langage SQL

  1. #1
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut Doublon multiple alors qu'il n'existe pas
    Bonjour,
    Je code un soft de gestion de magazin et je me connect à une BDD MySQL. Et je SELECT les types de produit, marques et produit de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Type.Nom AS Nom, Marque.Nom AS Marques, Produit.Nom AS Produits 
    FROM Type, Marque, Produit 
    ORDER BY Type.Nom, Marque.Nom, Produit.Nom ASC
    Et lorsque j'affiche j'ai 9 fois chacun des types de produits, chacune des marques et chaque produit.
    Est ce que cela vient de ma requete ou du Binding en C# WPF.
    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    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 103
    Points : 28 394
    Points
    28 394
    Par défaut
    Le résultat que tu obtiens est normal si tu as voulu faire un produit cartésien entre tes tables.
    Sinon il manque sans doute des critères de jointure entre les tables

  3. #3
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut
    Merci mais comment joindre 3 colonnes qui ne contiennent pas le même nombre de ligne ?
    Je voudrais 3 colonnes une qui contient les produits l'autre qui contient les marques et l'autre les types de produit.
    J'ai regardé sur les tutos de developpez.com mais cela ne m'a pas trop aidé.
    Merci

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Je ne connais pas MySQL mais, comme te le dit al1_24, essaie de joindre les tables entre elles sur leurs champs communs.

    Colle ici les champs de tes 3 tables.

  5. #5
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut
    Le problème c'est que les tables n'ont rien de commun un type de produit n'a rien n'avoir avec une marque.
    Est ce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Marque.Nom As Marques, Type.Nom AS Types
    FROM Marque, Type
    WHERE 1=1
    ferait une jointure correct ?

  6. #6
    Membre éclairé
    Avatar de patriceharel
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 466
    Points : 884
    Points
    884
    Par défaut
    Bonjour,

    Dans les trois tables décrites dans ta requête tu dois bien avoir une clé commune? Ton produit doit logiquement avoir une clé étrangère vers la marque et le type de produit non?

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Citation Envoyé par Mercure Voir le message
    Colle ici les champs de tes 3 tables.

  8. #8
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut
    Yes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Produit :
    Libelle Type Marque
    Type :
    Libelle
    Marque :
    Libelle

  9. #9
    Membre éclairé
    Avatar de patriceharel
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 466
    Points : 884
    Points
    884
    Par défaut
    Tu n'as donc aucune notion de clé dans tes tables? Tu n'as que des libellés? C'est une erreur de conception de ta base de données que de ne pas disposer de clé.

  10. #10
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut
    Type et Marque de Produit sont des cléfs étrangères.
    L'utilisateur peut ajouter des Produits qu'il n'a jamais rencontré et des marques qu'il n'a jamais vue, ...
    C'est un soft de gestion pour un "cash center"

  11. #11
    Membre éclairé
    Avatar de patriceharel
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 466
    Points : 884
    Points
    884
    Par défaut
    Dans ce cas tu peux écrire quelque chose de la sorte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Type.Nom AS Nom, Marque.Nom AS Marques, Produit.Nom AS Produits 
    FROM Produit INNER JOIN Type ON Produit.Type=Type.Cle INNER JOIN Marque ON Produit.Marque=Marque.Cle 
    ORDER BY Type.Nom, Marque.Nom, Produit.Nom ASC

  12. #12
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut
    Merci
    Une dernière chose comment faire pour avoir un unique Type et pas avoir 5 fois le type "Console" si il existe 5 "Produit" de "Console".

  13. #13
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonsoir,

    En dehors de ce qui a déjà été dit, j'y comprends rien !

    @al1_24 :
    tu as voulu faire un produit cartésien entre tes tables.
    + 1

    @patriceharel
    Ton produit doit logiquement avoir une clé étrangère vers la marque et le type de produit non?
    + 1

    Je pense (mais bon j'suis un peu pressé, j'ai peut-être pas assez lu) qu'il y a un énorme soucis de conception, du moins par ce que l'on imagine avec vos explications ... Et sur ce que je comprend, vous vous servez de libellés comme des clés étrangères ?!?!


  14. #14
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut
    J'ai fait un produit cartésien sans le vouloir
    Et Produit contient en effet 2 cléfs étrangère vers Type.Libelle et Marque.Libelle.
    Où est le problème ?
    Qu'est-je commis comme infamie.

  15. #15
    Membre éclairé
    Avatar de patriceharel
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 466
    Points : 884
    Points
    884
    Par défaut
    On ne construit pas de clé sur un libéllé pour la raison suivante... Imaginons que le type d'un produit soit mal orthographié : on ne pourra pas mettre à jour cette clé car elle est référencée dans une autre table. Il faudra supprimer toutes les références avant, mettre à jour et reconstruire les références.
    Avec une clé de (généralement) type numérique puis un libéllé associé à cette clé, ce problème ne se pose pas et nous n'avons qu'une seule ligne à mettre à jour.

    Une dernière chose comment faire pour avoir un unique Type et pas avoir 5 fois le type "Console" si il existe 5 "Produit" de "Console".
    Je ne comprend pas bien l'objectif de cette demande. Le but des jointures est justement de récupérer des infos issues d'autre table pour chaque ligne... Si c'est pour un soucis de présentation des données, ce n'est pas au niveau de la requête que cela se fait mais au niveau de l'outil de reporting

  16. #16
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    A votre place je construirai un tableau en C# qui reçoit trois requêtes différentes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT Type.Nom    AS Types    FROM Type    ORDER BY Type.Nom    ASC;
    SELECT DISTINCT Marque.Nom  AS Marques  FROM Marque  ORDER BY Marque.Nom  ASC;
    SELECT DISTINCT Produit.Nom AS Produits FROM Produit ORDER BY Produit.Nom ASC;

  17. #17
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut
    En effet j'avais oublié ce détail. En effet j'ai un petit problème de conception dans ma BD j'arrange ça tout de suite.

    Et je ne peux pas faire 3 requêtes puisque c'est des ComboBox de filtrage de donnée si l'utilisateur séléctionne un Type de produit dans la ComboBox marque je veux voir que les marques qui sont potentiellement du type Séléctionne. Et ainsi de suite.
    Et ok je vais voir en C# comment filtrer les uniques éléments.

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

Discussions similaires

  1. fichier qui n'existe pas alors qu'il est là (et que avec IE)
    Par laurentSc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 13/05/2013, 23h36
  2. [Débutant] "if data{10} n'existe pas alors"
    Par 6iluvatar9 dans le forum MATLAB
    Réponses: 2
    Dernier message: 04/11/2010, 09h52
  3. Erreur #1146: La table n'existe pas, alors que si
    Par Nazario dans le forum Requêtes
    Réponses: 8
    Dernier message: 09/09/2008, 18h42
  4. Si MATABLE n'existe pas alors la créer
    Par CDVDS dans le forum Sybase
    Réponses: 1
    Dernier message: 19/06/2007, 15h56
  5. Variable qui existe pas. Et alors?
    Par kalash_jako dans le forum Langage
    Réponses: 2
    Dernier message: 10/11/2006, 22h27

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