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 :

Chercher les enregistrements d'une table qui ne sont pas liés dans 2 autres tables


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Points : 119
    Points
    119
    Par défaut Chercher les enregistrements d'une table qui ne sont pas liés dans 2 autres tables
    Bonjour,

    J'ai besoin de récupérer une liste contenant uniquement les clients de la table des clients qui n'ont aucun enregistrements connexes dans 2 autres tables:

    table CLIENTS:
    Identifiant
    Nom
    etc..

    table EXPEDITIONS:
    IDClient
    etc..

    table DEMANDES:
    IDClient
    etc..

    Quelle requête faire pour obtenir les clients qui n'ont fait aucune demande ni expédition?
    J'utilise une base sous Access 2000. J'ai cherché du côté des jointures OUTER JOIN sans résultat. D'ailleurs, Access remplace mon OUTER JOIN par un simple JOIN...

    Merci d'avance si qqun peut m'aider

    Eric

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 101
    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 101
    Points : 28 398
    Points
    28 398
    Par défaut
    Trois solutions, LEFT JOIN, NOT IN ou NOT EXISTS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    SELECT  cli.*
    FROM    clients AS cli
        LEFT JOIN
            expeditions AS xpd
            ON cli.identifiant = xpd.idclient
        LEFT JOIN
            demandes    AS dmd
            ON cli.identifiant = dmd.idclient
    WHERE   xpd.idclient IS NULL
        AND dmd.idclient IS NULL
    ;
    SELECT  cli.*
    FROM    clients AS cli
    WHERE   cli.identifiant NOT IN
            (   SELECT  xpd.idclient    
                FROM    expeditions AS xpd
            )
        AND cli.identifiant NOT IN
            (   SELECT  dmd.idclient    
                FROM    demandes    AS xpd
            )
    ;
    SELECT  cli.*
    FROM    clients AS cli
    WHERE   NOT EXISTS
            (   SELECT  0   
                FROM    expeditions AS xpd
                WHERE   cli.identifiant = xpd.idclient
            )
        AND NOT EXISTS
            (   SELECT  0
                FROM    demandes    AS xpd
                WHERE   cli.identifiant = dmd.idclient
            )
    ;
    A toi de tester et choisir la plus performante

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Points : 119
    Points
    119
    Par défaut
    Merci bcp Al1_24 ;-)

    Seule la seconde methode (NOT IN) fonctionne en VB6 avec ADO:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  cli.*
    FROM    clients AS cli
    WHERE   cli.identifiant NOT IN
            (   SELECT  xpd.idclient    
                FROM    expeditions AS xpd
            )
        AND cli.identifiant NOT IN
            (   SELECT  dmd.idclient    
                FROM    demandes    AS dmd
            )
    Les deux autres me renvoient l'erreur "opérateur manquant". Y-a-t-il une grosse différence, à votre avis, dans les performances entre ces différentes requêtes ?

    Merci encore...

    Bon week-end

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 09/05/2012, 18h33
  2. Réponses: 10
    Dernier message: 18/06/2009, 13h27
  3. Réponses: 3
    Dernier message: 08/04/2008, 20h50
  4. [MySQL] Faire une jointure entre deux tables qui ne sont pas dans la même base de données
    Par sandddy dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 03/04/2008, 14h18
  5. Réponses: 4
    Dernier message: 11/07/2006, 21h43

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