[Access] Comparer deux grosses tables

Fermé
enigmatoile Messages postés 730 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mars 2008 - 13 mars 2007 à 16:05
 HelloWorld - 12 mars 2012 à 17:40
Bonjour,

Je souhaiterais faire une comparaison entre deux tables de meme structure, afin de savoir si dans l'une il y a des enregistrements qu'il n'ya pas dans l'autre.

Mon souci : mes tables sont ENORMES (250.000 lignes environ chacunes....).

La technique que j'utilisais jusqu'à présent est la suivante : je faisais des requetes pour chaque table où je concaténais les champs qui m'intéressaient, puis une requete de comparaison des concaténats par une formule de type

VraiFaux(EstNull[requete2]![Concaténat]);"inexistant";"existant"

En sélectionnant les "inexistant", j'obtiens les enregistrements qui sont dans le requete 1 et pas dans la requete 2

Cette technique marchait très bien jusqu'ici, car je n'en avais besoin que pour des tables de taille raisonnable...

J'ai essayé avec mes grosses tables, j'ai lancé ma requete avant de partir, à 18h ; ce matin à 9h30 elle n'était pas terminée...

Voyez vous une autre technique moins couteuse en temps?
Ou vais je devoir persuader les gens que c'est impossible?

Merci de vos conseils.
A voir également:

6 réponses

GauthierS Messages postés 14 Date d'inscription mardi 4 septembre 2007 Statut Membre Dernière intervention 16 novembre 2021 13
4 sept. 2007 à 15:22
Je ne sais pas si ce sujet est toujours d'actualité, mais voici quelque chose à essayer:

Select table1.id, table1.champ1, table1.champ2
From table1 left join table2 on (table1.id=table2.id and table1.champ1=table2.champ1 and table1.champ2=table2.champ2)
Where table2.id Is Null

Cette méthode devrait renvoyer tous les enregistrements de la table1 qui ne sont pas trouvé dans la table2
Attention que si une valeur est Null dans les 2 tables, comme Null n'est pas égal à Null, ça va aussi renvoyer ces enregistrements.
7
Bonjour à tous,
je suis actuellement sur un projet et je dois comparer deux tables que j'ai au préalable importées d'exel.
L'objectif est de savoir comment savoir quelles sont les données modifiées, supprimées, et mise à jour chez l'une et pas chez l'autre.
Je compte sur vous svp,merci!!
0
Merci beaucoup!! Ca a parfaitement solutionné mon problème !! :)
0
Parfait ! merci
0
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
13 mars 2007 à 17:16
Je suis peut -être trop optimiste, mais si les champs étaient indexés par date, il suffirait de regarder le dernier enregistrement de la première table et de partir de celui-ci pour voir combien ont été ajoutés dans l'autre.

évidemment ça ne marche que si tu ne dois pas trouver les enregistrements déjà existants qui auraient été modifiés...

Par ailleurs, si tu inclus deux tables non liées dans une même requête, tu vas avoir des erreurs: Access va afficher pour chaque enregistrement d'une table tous les enregistrements de l'autre table
Tu pourrais essayer de créer un lien entre les deux tables (clé primaire) puis choisir un des champs pouvant avoir été modifié et exécuter ce type de requête:

SELECT Table1.ChampX
FROM Table1 INNER JOIN Table2 ON Table1.Clé = Table2.Clé
WHERE (((Len([Table1].[ChampX]))<>Len([Table2].[ChampX])));

En combinant les deux méthodes et en répétant éventuellement sur les autres champs mis à jour, ça devrait fonctionner...
3
enigmatoile Messages postés 730 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mars 2008 5
13 mars 2007 à 17:29
Y'a pas de notions de date dans mes tables donc...

Sinon oui, je crée des liens quand je fais mes requetes, ce sont les tables qui n'ont de relations directes.

Ta deuxième idée ne me semble pas applicable à mon cas : jepeux avoir ddes cas où le champ1 est égal mais le champ2 différent...

Mais bon avec ma réponse au dessus je pense avoir trouvé un résultat viable :)
0
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
13 mars 2007 à 16:15
Quelques renseignements complémentaires...

Quand tu dis que ta structure est identique, tu veux dire que tous les champs sont communs?

Comment fonctionnent les clés primaires?

Et les relations?
1
enigmatoile Messages postés 730 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mars 2008 5
13 mars 2007 à 16:43
Oui, tous les champs sont identiques.

Les clés sont des nuémros autos.

Pas de relations entre les tables, il s'agit de memes infos à un instant T puis T+1.

Entre temps j'ai trouvé des pistes de réflexion:
Globalement ma table prend les valuers suivantes

service1 serveur1
service 2 servuer1
service a serveur2
serviceb serveur 2


Je pensais compter le nombre de services par serveur, et comparer ces nombres entre les 2 tables.

A ce moment là seulement je chercherai les nouveaux services; et pour un serveir fixé...

Il y a une autre solution plus hard, qui consisterait à faore un haché des services pour cq serveur, mais j'aimerais bien échapper à ca...
0
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
13 mars 2007 à 22:12
Content pour toi si tu as la solution...

Pour l'avenir, tu n'ajouterais pas un champ DateCréation et un autre DateModification, ça t'éviterait de te casser la tête...

Bonne soirée.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Jessthedevil
23 janv. 2008 à 03:02
Merci GauthiersS, tu m'as sauvé la vie. Cela fait Trois jours que je suis dessus.

Pour ceux qui buchent comme moi, ne faites pas la même erreur, ne travaillez pas sur des REQUÈTES, mais bien sur des TABLES !

Have Fun
0
Bonjour à tous,

Je suis nouveau sur ce forum et novice sur access / sql.

Je vous expose mon problème j'ai une base de données avec 2 tables comme suit :

Table1 Table2
Champ1 Champ1
enregistrement1 enregistrement1
enregistrement2 enregistrement2
enregistrement3 enregistrement3

Le champ1 de la Table1 contient une liste produit et le champ1 de la Table2 contient une liste aléatoire de mots-clés.

Je souhaiterai (sous Access) créé une requête de sorte qu'il me selectionne et m'affiche tous les enregistrements du champ1 (Table1) qui contiennent un mot-clé du champ1 (Table2).

Par ex :

Table1 / Champ1 contient "CremeSolaire", et la table 2 / Champ1 contient "Solaire".

Je souhaite donc que Cremesolaire qui contient "Solaire" soit selectionnée et affichée dans un rapport ou une nouvelle table.

Aidez moi s'il vous plaît, j'arrête pas d'essayer je pète un plomb.

Merci bien.
0