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 :

Problème de doublon dans le résultat d'une requete avec jointure


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 130
    Par défaut Problème de doublon dans le résultat d'une requete avec jointure
    Bonjour à tous.
    j'ai un problème avec une jointure sur deux tables que je n'arrive pas à résoudre.

    J'ai une table, IMBIENS, qui comprend des enregistrements de produits.
    J'ai une autre table, IMMEDIAS, qui comprend les médias correspants à chaque produit.
    Un produit peut n'avoir aucun media associé, comme une infinité (normalement 32 pour le moment, mais infini à théorie).
    Les tables sont reliées par un champ qui s'appele BICOD, qui est identique sur les deux tables et qui représente le code de l'enregistrement dans IMBIENS.

    Le but, c'est de récupérer les infos dans la base IMBIENS (le code dans l'exemple donné ci-dessous, mais une 10aine d'autres en réalité) plus le média numéro 1 seulement.

    J'ai donc fait cette requete sur les deux tables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT IMBIENS.BICOD AS BICOD,IMMEDIAS.MEDCHEMIN AS MEDCHEMIN FROM IMBIENS LEFT JOIN IMMEDIAS ON IMBIENS.BICOD = IMMEDIAS.BICOD 
    WHERE (IMBIENS.BIVENTE = 0 AND IMBIENS.BIANNULE = 0 AND IMBIENS.BICOD IS NOT NULL AND IMBIENS.BITYPOP = 1)  AND MEDTYPE = 1 AND MEDNUM = 1 order by bicod asc
    Qui me renvoie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    BICOD       |     MEDCHEMIN
    ----------------------------
       1018      |          NULL
       1022      |          NULL
       1022      |          1022_1.JPG
       1025      |          NULL
       1025      |          1025_1.JPG
       1029      |          NULL
       1029      |          1029_1.JPG
       1044      |          NULL
       1044      |          1044_1.JPG
    etc ...
    Le problème vient des doubles enregistrements renvoyés, un avec MEDCHEMIN à NULL, et un avec la valeur recherchée.

    J'essai de supprimer celui avec la valeur nulle, mais je n'y arrive pas.

    Si quelqu'un a une idée ...

    Merci d'avance.

    PS: J'ai oublié de préciser que tout ceci se passe sur le Serveur de Base de Données Hyperfile de PCSOFT.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Par défaut
    En rajoutant "AND MEDCHEMIN IS NOT NULL" dans le where clause?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 130
    Par défaut
    Salut, j'ai essayé déjà, mais le résultat est identique.

    Si je mets "AND MEDCHEMIN IS NULL", je n'ai que les NULL comme attendu.
    Si je mets "AND MEDCHEMIN IS NOT NULL", j'ai un résultat identique à mon problème O_o.

    C'est très bizarre.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Par défaut
    Je ne comprend en fait pas pourquoi tu utilises un LEFT JOIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DISTINCT IMBIENS.BICOD AS BICOD,IMMEDIAS.MEDCHEMIN AS MEDCHEMIN
    FROM IMBIENS, IMMEDIAS 
    WHERE IMBIENS.BIVENTE = 0 
    AND IMBIENS.BIANNULE = 0 
    AND IMBIENS.BICOD IS NOT NULL 
    AND IMBIENS.BITYPOP = 1  
    AND MEDTYPE = 1 
    AND MEDNUM = 1 
    AND IMBIENS.BICOD = IMMEDIAS.BICOD 
    ORDER BY bicod ASC
    Ceci ne fonctionne pas?

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 130
    Par défaut
    C'est parceque je veux faire une jointure qui exclue les enregistrements de la table IMMEDIAS qui ne correspondent pas aux critères.

    Une des mes sources d'inspiration pour les jointures => http://sql.developpez.com/sqlaz/jointures/

    La syntaxe que tu donnes correspond à un INNER JOIN, c-a-d que tous les enregistrements des deux tables sont pris.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 254
    Par défaut
    Parfois, je suis dur de comprenure
    Ce que tu veux c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    BICOD       |     MEDCHEMIN
    ----------------------------
       1018      |          NULL
       1022      |          1022_1.JPG
       1025      |          1025_1.JPG
       1029      |          1029_1.JPG
       1044      |          1044_1.JPG
    C'est à dire que s'il n'y a aucune correspondance, mettre une ligne avec MEDCHEMIN à null aussi non, ne pas afficher les doublons.

+ 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. Réponses: 2
    Dernier message: 30/06/2008, 10h20
  3. Réponses: 1
    Dernier message: 14/09/2007, 09h17
  4. Impossible d'exporter le résultat d'une requete avec Runtime
    Par papatte62360 dans le forum Runtime
    Réponses: 4
    Dernier message: 24/11/2006, 12h48
  5. [MySQL] Erreur dans une requête avec jointures
    Par bobic dans le forum Langage SQL
    Réponses: 17
    Dernier message: 03/08/2006, 13h04

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