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 :

Jointures sur table de liaison (n-n) renvoie des doublons


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 36
    Points : 27
    Points
    27
    Par défaut Jointures sur table de liaison (n-n) renvoie des doublons
    Hello,

    Je fais des jointures sur des tables (8)
    j'ai 7 jointures
    et quelques conditions
    Du très classique en somme...

    Mon souci est que 2 de ces tables sont des tables de liaison qui sont nécessaires dès lors qu'on a des tables avec une relation (0,n - 0,n)

    La requête me renvoie donc plusieurs fois la même ligne à cause de ces tables dont la spécificité est de répéter plusieurs fois la même clé.

    Peut être qu'un DISTINCT solutionnerais le problème mais il y a surement une soluce plus propre

    J'espère que j'expose mon problème clairement.

    Merci pour vos suggestions

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 783
    Points
    30 783
    Par défaut
    Avec un petit exemple, ce serait plus compréhensible

    Règles du forum Langage SQL à lire par tous
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Vous devez oublier des conditions de jointures dans vos "ON".

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Citation Envoyé par MICHEL_R Voir le message
    Peut être qu'un DISTINCT solutionnerais le problème mais il y a surement une soluce plus propre
    As-tu une clause GROUP BY dans la requête ?
    Citation Envoyé par MICHEL_R Voir le message
    J'espère que j'expose mon problème clairement.
    Ce serait beaucoup plus clair avec le code de la requête.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 36
    Points : 27
    Points
    27
    Par défaut UNE PISTE ?
    Avant tout merci pour vos suggestions.

    Je vous montre le code .
    Je crois avoir une piste mais je voudrais comprendre le fond du problème :
    J'ai fait la jointure entre tous mes fichiers, ensuite il y a des conditions qui sont renseignées par l'utilisateur. Dans un cas, une condition n'est pas renseignée
    , donc il n'y a pas de filtre mais les jointures reste les mêmes.
    Donc la suggestion de vmolines me parait la bonne, j'ai des conditions à rajouter au cas ou un certain filtre n'est pas pris en compte.
    Ca vous parait cohérent?

    Rapport au code voici les 3 des conditions qui sont sélectionnées mais pas en même temps. Il arrive donc que qu'une condition soit inactive???

    CLIENTS.COD_CL = ParamCLI OR GROUPES.COD_GR = ParamGRO OR SECTEURS.RRS = ParamRRS



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    SELECT 
      VENTES.VECLEUNIK AS VECLEUNIK,  
      VENTES.CLCLEUNIK AS CLCLEUNIK,  
      VENTES.PRCLEUNIK AS PRCLEUNIK,  
      VENTES.ANNEE_MOIS AS ANNEE_MOIS,  
      VENTES.QT1 AS QT1,  
      VENTES.CAHT AS CAHT,  
      CLIENTS.CLCLEUNIK AS CLCLEUNIK_CL,  
      CLIENTS.COD_CL AS COD_CL,  
      CLIENTS.CLIENT AS CLIENT,  
      CLIENTS.CODEPOSTAL AS CODEPOSTAL,  
      CLIENTS.VILLE AS VILLE,  
      PRODUITS.COD_PR AS COD_PR,  
      PRODUITS.LACLEUNIK AS LACLEUNIK,  
      PRODUITS.PRODUIT AS PRODUIT,  
      PRODUITS.PRCLEUNIK AS PRCLEUNIK_PR,  
      PRODUITS.DIVCLAFAM AS DIVCLAFAM_PR,  
      FAMILLES.DIVCLAFAM AS DIVCLAFAM,  
      FAMILLES.DIVISION AS DIVISION,  
      ADHESION.CLCLEUNIK AS CLCLEUNIK_AD,  
      ADHESION.GRCLEUNIK AS GRCLEUNIK,  
      GROUPES.GRCLEUNIK AS GRCLEUNIK_GR,  
      GROUPES.COD_GR AS COD_GR,  
      CLISECT.CLCLEUNIK AS CLCLEUNIK_CL1,  
      CLISECT.RRS AS RRS,  
      SECTEURS.RRS AS RRS_SE
    FROM 
      CLISECT,  
      SECTEURS,  
      PRODUITS,  
      FAMILLES,  
      VENTES,  
      CLIENTS,  
      ADHESION,  
      GROUPES
    WHERE 
        FAMILLES.DIVCLAFAM  =  PRODUITS.DIVCLAFAM
      AND  PRODUITS.PRCLEUNIK  =  VENTES.PRCLEUNIK
      AND  VENTES.CLCLEUNIK  =  CLIENTS.CLCLEUNIK
      AND  ADHESION.CLCLEUNIK  =  CLIENTS.CLCLEUNIK
      AND  GROUPES.GRCLEUNIK  =  ADHESION.GRCLEUNIK
      AND  CLISECT.CLCLEUNIK  =  CLIENTS.CLCLEUNIK
      AND  SECTEURS.RRS  =  CLISECT.RRS
      AND
      (
     
        (
          PRODUITS.COD_PR = ParamPRO
          OR  PRODUITS.DIVCLAFAM = ParamFAM
          OR  FAMILLES.DIVISION = ParamDIV
          OR  PRODUITS.COD_PR <> ''
        )
        AND  
        (
          CLIENTS.COD_CL = ParamCLI
          OR  
          (
            GROUPES.COD_GR = ParamGRO
     
          )
          OR  SECTEURS.RRS = ParamRRS
        )
      )

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Veillez à bien isoler vos conditions de jointure de vos conditions de filtre.

    Commencez par effectuer toutes vos conditions de jointures. Si vous pouvez utiliser JOIN pour se faire, ce sera d'autant plus simple, lisible et maintenable.

    Une fois les jointures validées, c'est à dire sans produit cartésien non souhaité, ajoutez vos filtres.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/05/2008, 11h56
  2. Réponses: 13
    Dernier message: 29/01/2008, 15h28
  3. Réponses: 3
    Dernier message: 08/11/2006, 23h04
  4. [FB1.5]Vue avec jointure sur tables ?
    Par Sitting Bull dans le forum SQL
    Réponses: 2
    Dernier message: 07/12/2004, 17h07
  5. jointure sur table et procedure stocké
    Par pram dans le forum SQL
    Réponses: 3
    Dernier message: 18/11/2004, 21h56

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