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 :

Mon NOT IN ne marche pas


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 40
    Points : 31
    Points
    31
    Par défaut Mon NOT IN ne marche pas
    Bonjour,

    J'ai un problème avec une de mes requêtes SQL qui ne m'affiche pas le résultat voulus;
    J'ai donc 2 table, client: qui contient le numero client et la localite, ma seconde table est commande: qui contient en autre le numero du client.

    J'aimerais en faite retrouver les localités ou aucun client n'a passez de commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT (CLIENT.LOCALITE)
    FROM CLIENT
    WHERE CLIENT.CLIENT NOT IN (SELECT COMMANDE.NCLI
                                             FROM COMMANDE
                                             WHERE CLIENT.CLIENT = COMMANDE.NCLI);
    Le problème c'est que le résultat me retourne aussi des localités qui ont passés commande.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 741
    Points
    11 741
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT CLIENT.LOCALITE
    FROM CLIENT
    WHERE CLIENT.CLIENT NOT IN (SELECT COMMANDE.NCLI FROM COMMANDE);

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Oups j'avais commis une erreur en postant merci .
    Sinon je précise que ma requête doit me retouner les loclités des clients qui n'ont pas commandés du tout.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 741
    Points
    11 741
    Par défaut
    et ce n'est pas le cas avec ma requête ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Non cela m'affiche aussi des localités ou d'autres client ont passé commande.

    En faite certain client sont de même localité d'ou le problème Mr "a" de toulouse à commandé mais Mr "b" de toulouse n'a pas commandé, donc d'office il faudrait éliminer Toulouse puisqu'il y a déja eu une commande dans cette localité.

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Donc c'est ton besoin qui est mal exprimé :
    ma requête doit me retouner les localités des clients qui n'ont pas commandés du tout.
    Ce serait plutôt :
    "ma requête doit me retouner les localités où il n'existe aucun client ayant commandé."

    Ce qui se traduit en SQL par NOT EXISTS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DISTINCT c.LOCALITE
    FROM CLIENT AS c
    WHERE NOT EXISTS (
      SELECT *
      FROM (
       SELECT DISTINCT cl.LOCALITE
       FROM CLIENT AS cl
       INNER OUTER JOIN COMMANDE AS cd ON cl.CLIENT = cd.NCLI
      ) AS t1
      WHERE c.LOCALITE = t1.LOCALITE
    )

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Un peu plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      SELECT CLI.LOCALITE
        FROM CLIENT CLI
             LEFT OUTER JOIN COMMANDE CMD
               ON CMD.NCLI = CLI.CLIENT
    GROUP BY CLI.LOCALITE
      HAVING COUNT(CMD.NCLI) = 0

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Je me disais en effet que ma solution était un peu tirée par les cheveux dans la soupe !

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Oui je m'étais mal expliqué, désolé je débute en SQL...
    Merci à vous ca marche parfaitement bien !

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

Discussions similaires

  1. Pourquoi mon XmlInclude( dataset) ne marche pas?
    Par Arbiorix dans le forum Services Web
    Réponses: 2
    Dernier message: 09/12/2008, 17h17
  2. mon header location ne marche pas
    Par 123quatre dans le forum Langage
    Réponses: 1
    Dernier message: 29/12/2007, 16h46
  3. Mon "NOT NULL" ne fonctionne pas ?!
    Par Armagnak dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2007, 15h03
  4. Mon service Windows ne marche pas
    Par laadhar dans le forum Langage
    Réponses: 9
    Dernier message: 01/02/2006, 18h13
  5. IS NOT NULL ne marche pas !!!! ??????
    Par SkyDev dans le forum Requêtes
    Réponses: 5
    Dernier message: 19/04/2004, 17h08

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