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 dans le outer join


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 80
    Par défaut Problème dans le outer join
    Bonjour,
    svp j'ai deux tables:
    1-clients (id_client,nom_client) cette table contient tout les clients
    2-achats_clients (id_client,mois,année) contient seulement les clients qui ont effectué un achat durant le mois et l'année specifiés

    je veux avoir la liste de tout les clients ceux qui ont effectue des achats et ceux qui n'ont pas effectué un achat durant le mois par exemple 9 et l'année 2014
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select f.nom_client,h.mois,h.année
    from client f left outer join achat_clients h
    on f.id_client=h.id_client
    where h.mois=9 and h.année=2014

    mais cette requette me retourne seulement les clients qui existent dans la table achats_clients alors que moi j'ai specifie left outer join donc je veux tout les clients de la table client ?
    Svp est ce que vous pouvez m'indiquer ou est le problemeNom : tables.jpg
Affichages : 200
Taille : 45,4 Ko

    j'ai essaie d'ajouter dans la clause where la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select f.nom_client,h.mois,h.année
    from client f left outer join achat_clients h
    on f.id_client=h.id_client
    where (h.mois=9 and h.année=2014) or (h.mois is null and h.année is null)
    mais le resultat est le meme et le client n° 1 ne s'affiche pas !!

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    La jointure externe est liée à la clause ON de la jointure et non pas à la clause WHERE ! La clause WHERE (restriction) s'applique à un résultat intermédiaire obtenu avant ou après l'application de la jointure externe selon le plan d'exécution élaboré par l'optimiseur.

    Ci-dessous 2 solutions à votre problème :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT f.id_client, f.nom_client,h.mois,h.année
    FROM dbo.client f 
    LEFT OUTER JOIN dbo.achat_clients h
      ON  f.id_client = h.id_client
      AND h.mois = 9 
      AND h.année = 2014
    ORDER BY f.Nom_client ;
    Ou
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ;WITH achat_09_2014 AS 
       (SELECT  h.* 
        FROM dbo.achat_clients h
    	WHERE h.mois = 9 and h.année = 2014 )
    SELECT  f.id_client, f.nom_client, achat_09_2014.mois, achat_09_2014.année
    FROM dbo.client f 
    LEFT OUTER JOIN achat_09_2014 
      ON f.id_client = achat_09_2014.id_client
    ORDER BY f.Nom_client

    Les 2 requêtes SQL ci-dessous donnent exactement le même résultat ci-dessous :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    id_client	nom_client	mois	année
    3	Bruno	9	2014
    2	Jean	9	2014
    1	Max	NULL	NULL

    A+

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 80
    Par défaut
    Je vous remercie infiniment Monsieur hmira,ca marche très très bien ;-)

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

Discussions similaires

  1. Problème dans left outer join
    Par aymen007 dans le forum SQL
    Réponses: 1
    Dernier message: 21/05/2008, 12h03
  2. Problème de left outer join avec Ibatis
    Par sarsipius dans le forum JDBC
    Réponses: 1
    Dernier message: 28/02/2008, 14h51
  3. problème de LEFT OUTER JOIN
    Par Smix007 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 25/07/2007, 18h54
  4. Problème de FULL OUTER JOIN
    Par gibea00 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/05/2007, 17h12
  5. Problème avec left outer join
    Par jgfa9 dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/08/2005, 21h07

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