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 :

[SQL] extraire les enregistrements différents de 2 tables (access 2000)


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut [SQL] extraire les enregistrements différents de 2 tables (access 2000)
    Bonjour à tous,
    Deux tables pratiquement identiques;
    une comporte 2296 enregistrements, l'autre 2292.
    Ce cas de figure se produit souvent dans mes manipulations.
    A l'aide d'une requête ou d'un petit module, je voudrais extraire facilement les champs différents dans la table de 2296; ils peuvent bien sûr se trouver n'importe où. Ce sont des zonages de communes d'aquitaines, et une table est de 1999 et l'autre de 2005; celle de 2005 comporte 4 enregistrements de moins.
    Je ne connais très peu le vba d'access (avant je programmais en C++)
    Dans la faq, j'ai trouvé ce code, mais il ne fonctionne pas; l'étoile n'est pas comprise par le compilateur.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select *
    From Table1 AS T1
    Where Not Exists (Select null
            From Table2 AS T2
            Where T1.[champT1]=T2.[champT2]
    Ad talure !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 42
    Points : 43
    Points
    43
    Par défaut
    essaye table1.*

  3. #3
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    non ça ne marche pas; j'ai essayé comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Option Compare Database
    Sub extrait()
    Select *
    From zones_aquitaine_2005.CODGEO
    Where Not Exists (Select null
    From zones_aquitaine.code_com
    Where zones_aquitaine_2005.[CODGEO] = zones_aquitaine.[code_com]
    End Sub
    c'est mieux mais j'ai tj 'select *' et la ligne 'where' en rouge

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    si tu as un identifiant unique (ici numcom numéro de commune) la requête suivante devrait t'aider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT tab1999.numcom, "existe en 1999 et pas en 2005" AS comment
    FROM tab1999 LEFT JOIN tab2005 ON tab1999.numcom = tab2005.numcom
    WHERE tab2005.numcom  Is Null
    union
    SELECT tab2005.numcom, "existe en 2005 et pas en 1999" AS comment
    FROM tab2005 LEFT JOIN tab1999 ON tab2005.numcom = tab1999.numcom
    WHERE tab1999.numcom Is Null;
    nb tu peux en faire deux reqêtes distinctes en remplacant union par ;

  5. #5
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    En fait dans la table 'zones_aquitaine_2005', j'ai le champ 'CODGEO'
    qui correspond à code_geo dans la table 'zones_aquitaine'
    Dans la 1ère table il y a 5 enregistrements de plus; je voudrais les isoler.
    Les champs codgeo et code_geo contiennent les codes des communes; seulement il y en a 5 de plus dans la 1ere table.
    C'est un scénario qui se répête assez souvent c'est pour cela, vu qu'il y la plupart du temps plusieurs milliers d'enregistrements, que je voudrais un outil pour repérer facilement les enregistrements en sus.
    C'est 'select' que mon compilateur n'aime pas; il me dit qu'il faut après 'case', mais c'est pas un select case que je veux faire!
    La syntaxe est mauvaise, évidemment, malheureusement je ne connais pratiquement pas le vba d'access 2000 (les autres non plus d'ailleurs!).

  6. #6
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Salut,

    Citation Envoyé par DonQuiShoote
    non ça ne marche pas; j'ai essayé comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Option Compare Database
    Sub extrait()
    Select *
    From zones_aquitaine_2005.CODGEO
    Where Not Exists (Select null
    From zones_aquitaine.code_com
    Where zones_aquitaine_2005.[CODGEO] = zones_aquitaine.[code_com]
    End Sub
    c'est mieux mais j'ai tj 'select *' et la ligne 'where' en rouge

    Citation Envoyé par DonQuiShoote
    C'est 'select' que mon compilateur n'aime pas; il me dit qu'il faut après 'case', mais c'est pas un select case que je veux faire!
    La syntaxe est mauvaise, évidemment, malheureusement je ne connais pratiquement pas le vba d'access 2000 (les autres non plus d'ailleurs!).
    C'est normal tu ne peux pas mettre le code SQL directement dans un procédure. Si tu veux renseigner du sql dans une procédure il faut le mettre en tant que chaîne de caractère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim SQL as String
    SQL = "SELECT ....."
    mais même comme cela il faut qu'il te serve à quelque chose, renseigner une requête, la source d'un Form, d'un SousForm.

    Que veux-tu faire avec cette requête ?

    Dolphy

  7. #7
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Je voudrais extraire les 5 enregistrements qui diffèrent entre les deux tables.

  8. #8
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Citation Envoyé par DonQuiShoote
    Je voudrais extraire les 5 enregistrements qui diffèrent entre les deux tables.
    As-tu esseyé la requête de random ?

    Tu veux exécuter cela d'une requête dans un Form ?

    Créer une requête tu te met en SQL et tu adapte le code de random.

  9. #9
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    D'ac; je n'avais pas compris; je l'utilisais directement dans un module.
    Je vais essayer ce tantôt; c'est une requête toute simple que je veux; simplement pour ne plus perdre mon temps quand le scénario se produit.
    Mes difficultés viennent du fait que je n'utilise access et son vba que depuis un mois environ.
    Merci à tous.

  10. #10
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Essai non concluant, comme disait un de mes chefs!
    Voilà le code tel que je l'ai adapté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT zones_aquitaine.code_com, "existe en 1999 et pas en 2005" AS comment
    FROM zones_aquitaine LEFT JOIN zones_aquitaine_2005 ON zones_aquitaine.code_com = zones_aquitaine_2005.CODGEO
    WHERE zones_aquitaine_2005.CODGEO  Is Null
    union
    SELECT zones_aquitaine_2005.CODGEO, "existe en 2005 et pas en 1999" AS comment
    FROM zones_aquitaine_2005 LEFT JOIN zones_aquitaine ON zones_aquitaine_2005.CODGEO = zones_aquitaine.code_com
    WHERE zones_aquitaine_2005.CODGEO Is Null;
    Le résultat est une table vide; pourtant j'ai passé les tables en revue pour trouver un des enregistrements différents;
    J'en ai trouvé un; le voici :
    table zones_aquitaine_2005 (celle qui contient 2296 enregistrements)
    1589 codgeo = 47162
    1890 codgeo = 47163

    table zones_aquitaine (celle qui contient 2292 enregistrements)
    1589 code_com = 47162
    1590 code_com = 47164

    Mais la requête n'extrait pas 47163 qui pourtant ne se trouve pas dans la 2e table !?! Je voudrais que la requête sorte les 4 enregistrement qui manquent dans la table zones_aquitaine.

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    tu as mis deux fois
    zones_aquitaine_2005.CODGEO Is Null
    cela n'est pas correct
    dans l'une des requêtesd tu devrais avoir
    zones_aquitaine.code_com is null

  12. #12
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Bonjour tout le monde!
    Evidemment! Faut être bête! Et pourtant je l'ai relue plusieurs fois!
    J'aurais peut-être pas dû nommer les tables avec des noms aussi proches!
    ça marche; cette requête va me faciliter la vie!
    Ci-dessous la requête corrigée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT zones_aquitaine.code_com, "existe en 2005 et pas en 1999" AS comment
    FROM zones_aquitaine LEFT JOIN zones_aquitaine_2005 ON zones_aquitaine.code_com = zones_aquitaine_2005.CODGEO
    WHERE zones_aquitaine_2005.CODGEO  Is Null
    UNION SELECT zones_aquitaine_2005.CODGEO AS comment
    FROM zones_aquitaine_2005 LEFT JOIN zones_aquitaine ON zones_aquitaine_2005.CODGEO = zones_aquitaine.code_com
    WHERE zones_aquitaine.code_com Is Null;
    Merci beaucoup à tout le monde.
    Bonne journée,
    DonQuiShoote.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 03/07/2012, 17h22
  2. Réponses: 2
    Dernier message: 26/04/2007, 16h32
  3. Réponses: 3
    Dernier message: 06/11/2006, 08h14
  4. Réponses: 7
    Dernier message: 20/02/2006, 16h18
  5. Réponses: 2
    Dernier message: 18/10/2005, 08h05

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