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 :

[Access 97] Sélectionner des clients qui n'ont que certains produits


Sujet :

Langage SQL

  1. #1
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut [Access 97] Sélectionner des clients qui n'ont que certains produits
    Bonjour

    J'ai une table avec des clients qui ont chacun ou plusieurs produits.
    Y a-t-il un moyen simple de sélectionner les clients qui n'ont que certains produits ?
    Un petit dessin valant mieux qu'un long discours, comment sélectionner le client 3 car il n'a que les produits C et D (mais pas le client 1 ni le 2 ) dans cette base :
    CLIENT | PRODUIT
    client1 | produitA
    client1 | produitB
    client1 | produitC
    client2 | produitA
    client2 | produitB
    client3 | produitC
    client3 | produitD

    Le but est d'utiliser le critère "le client n'a que les produits spécifiés" dans une requête UPDATE sous access 97.

    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 397
    Points
    28 397
    Par défaut
    SELECT DISTINCT v1.client
    FROM vente AS v1
    LEFT JOIN vente AS v2
    ON v1.client = v2.client
    AND v2.produit NOT IN ('C', 'D')
    WHERE v2.client IS NULL

  3. #3
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Citation Envoyé par al1_24
    SELECT DISTINCT v1.client
    FROM vente AS v1
    LEFT JOIN vente AS v2
    ON v1.client = v2.client
    AND v2.produit NOT IN ('C', 'D')
    WHERE v2.client IS NULL
    Merci, mais ca ne fonctionne pas (expression de jointure non supportée).
    J'ai aussi essayé
    SELECT DISTINCT v1.client
    FROM vente AS v1
    LEFT JOIN vente AS v2
    ON v1.client = v2.client
    WHERE (v2.client IS NULL AND v2.produit NOT IN ('C', 'D'))

    et ca ne marche pas non plus (si c'est ce que tu voulais dire), car ca renvoie un résultat nul alors que ca ne devrait pas.

    J'ai du mal à comprendre pourquoi, parce que ta solution m'a l'air correcte d'ailleurs

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 397
    Points
    28 397
    Par défaut
    essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DISTINCT v1.client
    FROM vente AS v1
    WHERE NOT EXISTS (SELECT 1
      FROM vente AS v2
      WHERE v1.client = v2.client
        AND v2.produit NOT IN ('C', 'D')
      )

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 397
    Points
    28 397
    Par défaut
    ou ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT v1.client
    FROM vente AS v1
    WHERE v1.client NOT IN (SELECT v2.client
      FROM vente AS v2
      WHERE v2.produit NOT IN ('C', 'D')
      )

  6. #6
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Citation Envoyé par al1_24
    ou ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT v1.client
    FROM vente AS v1
    WHERE v1.client NOT IN (SELECT v2.client
      FROM vente AS v2
      WHERE v2.produit NOT IN ('C', 'D')
      )
    Merci, ca fonctionne très bien. Et en plus, cette solution a l'avantage de ne pas utiliser de LEFT JOIN, ce qui permet de l'imbriquer directement dans une autre requête utilisant des INNER JOIN
    Par contre, je n'ai toujours pas compris pourquoi la première solution que tu as proposée ne renvoie rien.

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 397
    Points
    28 397
    Par défaut
    Citation Envoyé par guidav
    Par contre, je n'ai toujours pas compris pourquoi la première solution que tu as proposée ne renvoie rien.
    Sans doute une question d'optimiseur...

    Pense à utiliser le bouton .

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/08/2008, 11h53
  2. Réponses: 2
    Dernier message: 26/01/2008, 12h19
  3. Réponses: 4
    Dernier message: 07/12/2006, 09h53
  4. Réponses: 4
    Dernier message: 08/06/2006, 13h18
  5. la liste des clients qui n'ont pas acheter aucun article ...
    Par TéBeSsI dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/02/2004, 14h57

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