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

Développement SQL Server Discussion :

Problème de jointure


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 42
    Par défaut Problème de jointure
    Bonjour à tous,

    j'essaie désespérément d'effectuer une jointure entre 2 tables afin que le résultat de ma requête me ramène l'ensemble des données, qu'elles trouvent une donnée ou pas.

    Ma requête doit me renseigner sur les spécificités de véhicules. certains de ces véhicules possèdent des options et d'autres non.

    Si je ne récupère pas les options des véhicules, la requête me ramène environ 40 000 lignes mais si je demande les options, je n'en ai plus que 23 000 ce qui signifie que ca ne ramene que les champs pour lesquels j'ai une équivalenece.

    J'ai testé le left join, right join, inner join, natural join... mais sans meilleur résultat.

    Pouvez vous venir en aide à un petit débutant ?

    Merci d'avance,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    select  p.PARC_ID, p.MARQUE, p.CODE_PF, p.CODE_CATEGORIE, convert(char,c.DTE_DMC,103) as DTE_DMC, c.PTC,
    	    cast(sum((datediff(d,c.DTE_DMC,CURRENT_TIMESTAMP))) as numeric)/365/count(p.PARC_ID) as Age,
    	    r.CODE_MODELE_ARTICLE
     
    from PARC p, PARC_CGRISE c
    left join  RL_ARTVENDPARC r on r.PARC_ID = c.PARC_ID 
     
    where p.PARC_ID = c.PARC_ID
    and   c.DTE_DMC is not null
    and   r.CODE_FAMARTICLE like 'group_opt'
     
    group by p.PARC_ID, p.MARQUE, p.CODE_PF, p.CODE_CATEGORIE, c.DTE_DMC, c.PTC, r.CODE_MODELE_ARTICLE
    order by p.parc_id asc

  2. #2
    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
    Par défaut
    Vous mélangez les types de jointure

    Enlevez votre jointure "à l'ancienne" du coup retirez également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE p.PARC_ID = c.PARC_ID
    qui est la raison du filtrage des lignes que vous attenez :

    Avec votre jointure externe sur RL_ARTVENDPARC, les véhicules n'ayant pas d'options auront la colonne ID_PARC à NULL... et donc la condition p.PARC_ID = c.PARC_ID ne sera pas vérifiée.

    de même celle-ci non plus :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND   r.CODE_FAMARTICLE LIKE 'group_opt'

    Essayez :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT  p.PARC_ID, p.MARQUE, p.CODE_PF, p.CODE_CATEGORIE, convert(char,c.DTE_DMC,103) AS DTE_DMC, c.PTC,
    	    cast(sum((datediff(d,c.DTE_DMC,CURRENT_TIMESTAMP))) AS numeric)/365/count(p.PARC_ID) AS Age,
    	    r.CODE_MODELE_ARTICLE
     
    FROM PARC p
    INNER JOIN PARC_CGRISE c ON c.ID_PARC = p.ID_Parc
    LEFT JOIN  RL_ARTVENDPARC r ON r.PARC_ID = p.PARC_ID 
     
    WHERE c.DTE_DMC IS NOT NULL
    AND   (r.CODE_FAMARTICLE  IS NULL OR r.CODE_FAMARTICLE LIKE 'group_opt')
     
    GROUP BY p.PARC_ID, p.MARQUE, p.CODE_PF, p.CODE_CATEGORIE, c.DTE_DMC, c.PTC, r.CODE_MODELE_ARTICLE
    ORDER BY p.parc_id ASC

  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
    Par défaut
    En fait, vous pourriez même remplacer votre LIKE par un =, et déplacer votre condition dans la jointure :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT  p.PARC_ID, p.MARQUE, p.CODE_PF, p.CODE_CATEGORIE, convert(char,c.DTE_DMC,103) AS DTE_DMC, c.PTC,
    	    cast(sum((datediff(d,c.DTE_DMC,CURRENT_TIMESTAMP))) AS numeric)/365/count(p.PARC_ID) AS Age,
    	    r.CODE_MODELE_ARTICLE
     
    FROM PARC p
    INNER JOIN PARC_CGRISE c 
        ON c.ID_PARC = p.ID_Parc
    LEFT JOIN  RL_ARTVENDPARC r 
        ON r.PARC_ID = p.PARC_ID 
        AND r.CODE_FAMARTICLE = 'group_opt'
    WHERE c.DTE_DMC IS NOT NULL
    GROUP BY p.PARC_ID, p.MARQUE, p.CODE_PF, p.CODE_CATEGORIE, c.DTE_DMC, c.PTC, r.CODE_MODELE_ARTICLE
    ORDER BY p.parc_id ASC

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 42
    Par défaut
    Merci beaucoup aieeeuuuuu, vous me venez en aide régulièrement en ces derniers temps et comme d'habitude c'est parfait.

    passez une bonne journee

  5. #5
    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
    Par défaut
    de rien

    Bonne journée également

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

Discussions similaires

  1. Problème de jointure de tables
    Par AurelBUD dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/04/2005, 16h27
  2. Probléme de jointure
    Par Ajrarn dans le forum Langage SQL
    Réponses: 14
    Dernier message: 24/02/2005, 14h57
  3. Vraisemblable problème de jointure
    Par pimousse76 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2005, 15h34
  4. [MS Access] Problème de jointure
    Par Erakis dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/02/2005, 21h15
  5. Problème de jointure ?!
    Par ebaynaud dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/11/2004, 11h27

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