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

Requêtes et SQL. Discussion :

Exclure les enregistrements présent dans une autre table [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 117
    Points : 44
    Points
    44
    Par défaut Exclure les enregistrements présent dans une autre table
    Bonjour,

    Voilà mon soucis:

    J'ai deux tables:

    T1 : Email, Nom
    T2 : Email, Nom

    J'aimerais extraire de T1 tous les enregistrements dont l'email n'est pas présent dans T2.

    Donc d'après les tutoriels, il faut utiliser LEFT JOIN, ce qui donne une requête comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T1.Email
    FROM T1 LEFT JOIN T2 
        ON T1.Email=T2.Email
    WHERE T2.Email Is NULL;;
    Sauf que ça marche pas puisque j'obtiens plus d'enregistrement que dans T1, or ça devrait être le contraire.
    Vous comprenez ce que je veux dire?
    Vous voyez comment faire ?


    PS: Je travaille sur Access 2003

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Bonjour,
    une autre approche dans ce cas là :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM T1 WHERE T1.ChampA NOT IN (SELECT ChampA FROM T2);
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 117
    Points : 44
    Points
    44
    Par défaut
    Cette requête a l'air de bien fonctionner. Par contre, elle est très très longue.
    ça fait une heure qu'elle tourne et je n'ai qu'un dixième des résultats...

    Je bosse sur des tables d'environ 100.000 enregistrements...

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    oui, une requête très longue.
    A toute fin utile, le cours sur les jointures de Maxence Hubiche :
    http://mhubiche.developpez.com/Access/tutoJointures/
    et la partie sur la non correspondance :
    http://mhubiche.developpez.com/Acces...ointures/#L3.7

    ton résultat d'origine me parait bizarre dans ce cas là
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 117
    Points : 44
    Points
    44
    Par défaut
    Bizarre, bizarre, la requête s'est finalement terminée et j'obtiens aussi plus de résultat que dans la table T1

    C'est pas normal.

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    et avec un distinct ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 117
    Points : 44
    Points
    44
    Par défaut
    Il y a beaucoup de doublons dans cette table, je comptais faire le dédoublonnement à la fin car j'ai d'autres manip à faire avant.

    Apparemment, la première requête me donne un résultat correct.
    Mais je ne comprend toujours pas pourquoi elle donne plus d'enregistrement que la table d'origine...

  8. #8
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut jpcheck et ajor,

    ta première requete est correcte.

    Citation Envoyé par ajor
    Mais je ne comprend toujours pas pourquoi elle donne plus d'enregistrement que la table d'origine...
    à mon avis c'est une illusion d'optique...
    un "left join" ne peut jamais donner plus d'enregistrement.
    essaies:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) as nb_non_correspondant, dcount("*","t1") as nb_origine from (SELECT T1.Email FROM T1 LEFT JOIN T2 ON T1.Email=T2.Email WHERE T2.Email Is NULL)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/06/2010, 11h55
  2. enregistrement inexistant dans une autre table
    Par marcoxx dans le forum SQL
    Réponses: 6
    Dernier message: 12/04/2010, 21h38
  3. Réponses: 5
    Dernier message: 19/02/2009, 17h00
  4. Réponses: 7
    Dernier message: 05/09/2008, 11h07
  5. retirer les enregistrements présents dans une autre table
    Par Didine1801 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/10/2007, 16h07

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