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

MS SQL Server Discussion :

Problème avec outer join


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 80
    Points : 54
    Points
    54
    Par défaut Problème avec 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
    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 probleme
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Le coup classique du where sur la table jointe qui ne prend pas en compte le fait que les champs joints peuvent être null (quand il n'y a pas de correspondance) transformant de fait implicitement la jointure externe en jointure interne.

    Si tu veux aussi les enregistrements ou les champs mois et annees sont null, il faut explicitement le préciser dans le where
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 80
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    Le coup classique du where sur la table jointe qui ne prend pas en compte le fait que les champs joints peuvent être null (quand il n'y a pas de correspondance) transformant de fait implicitement la jointure externe en jointure interne.

    Si tu veux aussi les enregistrements ou les champs mois et annees sont null, il faut explicitement le préciser dans le where
    Je vous remercie sevyc64 pour votre aide,si j'ai bien compris ta phrase
    Citation Envoyé par sevyc64 Voir le message
    il faut explicitement le préciser dans le where
    ma requette sera comme ca:
    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 le client numero 1 ne s'affiche pas ?

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    peut-être comme ça where (h.mois=9 and h.année=2014) or( h.mois is null and h.année is null)
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 80
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    peut-être comme ça where (h.mois=9 and h.année=2014) or( h.mois is null and h.année is null)
    sevyc64 Ca marche toujours pas meme avec les parenthèses
    where (h.mois=9 and h.année=2014) or( h.mois is null and h.année is null)

  6. #6
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Bizarre, ça aurait dû.

    Tu es sur que ta requête est correcte par ailleurs, parce que tu parle d'une table client, mais dans la requête, c'est une table fonctionnaire
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 80
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    Bizarre, ça aurait dû.

    Tu es sur que ta requête est correcte par ailleurs, parce que tu parle d'une table client, mais dans la requête, c'est une table fonctionnaire
    Oui ,je parle de la table client (j'ai changé le nom de la table juste pour simplifier ma requete)

  8. #8
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    C'est normal : les clients qui ont effectué des achats mais pour d'autres mois sont filtrés.

    Passez les conditions sur le mois et l’année dans la jointure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    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
        AND h.mois=9 
        AND h.année=2014

  9. #9
    Membre expérimenté

    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
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    Après la lecture de cette discussion, il me semble que cette question a été postée 2 fois par le même auteur !
    voir :
    http://www.developpez.net/forums/d14...me-outer-join/

    A+
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

Discussions similaires

  1. requete JPQL avec un problème de OUTER JOIN
    Par flamant dans le forum JPA
    Réponses: 0
    Dernier message: 28/12/2012, 11h33
  2. Problème avec LEFT JOIN
    Par Sorgue dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/01/2007, 18h37
  3. Problème Inner Outer Join
    Par silmortes dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 23/10/2006, 16h10
  4. requete avec outer join
    Par lazzeroni dans le forum Oracle
    Réponses: 3
    Dernier message: 09/05/2006, 15h38
  5. [Oracle] problème avec INNER JOIN
    Par Philofish dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/09/2005, 10h20

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