Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Débutant requete différence

3 réponses
Avatar
Eric MARTIN
Bonjour,

Je travaille sous Access 2003.

J'ai deux tables du même type. Il y a des articles en commun dans les deux
tables.

Je voudrais avoir la différence des deux tables (les articles non en commun
dans les deux tables) dans une nouvelle table.

Merci de votre aide.

3 réponses

Avatar
daniel
Bonsoir,
Dans l'onglet des requêtes, cliquer bonton "nouveau", et là choisir
"Assistant Requête de non correspondance".
La suite, suivant les choix est facile et très pédagogique
Bonne soirée.
Avatar
Eric
Bonjour,

En supposant que les 2 tables ont un champ commun (comme l'identifiant
qui ne doit pas être un numéro automatique) par exemple RefArticle et en
supposant que la table1 peut avoir des enregistrements propres à elle et
d'autres communs avec la table2, de même la table 2 peut avoir des
enregistrements propres et d'autres communs avec la table1. Il te faut
faire une requête création de table dans laquelle tu insères les
enregistrements propres respectivement à chacune des 2 tables,
enregistrements issus d'une requête Union.

Adapter le nom des tables et des champs de jointure - Code à copier dans
la fenêtre SQL de la requête (Creation d'une requête - Fermer la fenêtre
'Ajouter une table' - Menu Affichage - Mode SQL):

Création de la table avec Jointure externe & Union

SELECT * INTO TableDesAbsents
FROM (
SELECT * FROM tbl1 LEFT JOIN tbl2
ON tbl1.RefArticle = tbl2.RefArticle
WHERE tbl2.RefArticle Is Null
UNION
SELECT * FROM tbl2 LEFT JOIN tbl1
ON tbl1.RefArticle = tbl2RefArticle
WHERE tbl1.RefArticle Is Null
)
AS Essai
;

Cette méthode est la plus rapide.

Variante : Création de la table avec Union de sous-requêtes
SELECT * INTO TableDesAbsents
FROM (
SELECT *
FROM tbl1
WHERE RefArticle NOT IN (
SELECT RefArticle FROM tbl2
)
UNION
SELECT *
FROM tbl2
WHERE RefArticle NOT IN (
SELECT RefArticle FROM tbl1
)
) AS Essai
;

Explication:
SELECT *
FROM tbl1
WHERE RefArticle NOT IN (
SELECT RefArticle FROM tbl2
)
cette requête te donne tous les enreg de la table 1 qui ne sont pas dans
la table 2.

SELECT *
FROM tbl2
WHERE RefArticle NOT IN (
SELECT RefArticle FROM tbl1
)
Celle-ci te donne ceux de table 2 absents de table 1

L'UNION entre ces 2 requêtes va te retourner tous les absents
respectivement des tables 1 et 2.

Le SELECT INTO créee une nouvelle table nommée TableDesAbsents.




Bonjour,

Je travaille sous Access 2003.

J'ai deux tables du même type. Il y a des articles en commun dans les deux
tables.

Je voudrais avoir la différence des deux tables (les articles non en commun
dans les deux tables) dans une nouvelle table.

Merci de votre aide.




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Eric
.../...

et si tu veux savoir aussi dans la table des absents si l'article est
absent de tbl1 ou de tbl2, modifies comme suit:

SELECT * INTO TableDesAbsents
FROM (
SELECT * , "Absent de tbl2" AS Origine FROM tbl1 LEFT JOIN tbl2
ON tbl1.RefArticle = tbl2.RefArticle
WHERE tbl2.RefArticle Is Null
UNION
SELECT * , "Absent de tbl1" FROM tbl2 LEFT JOIN tbl1
ON tbl1.RefArticle = tbl2RefArticle
WHERE tbl1.RefArticle Is Null
)
AS Essai
;
Je viens de voir qu'avec la requête ci-dessus tu vas avoir 2 fois les
champs, ce qui n'est pas le cas avec la variante.

SELECT * INTO TableDesAbsents
FROM (
SELECT * , "Absent de tbl2" AS Origine
FROM tbl1
WHERE RefArticle NOT IN (
SELECT RefArticle FROM tbl2
)
UNION
SELECT *, "Absent de tbl1"
FROM tbl2
WHERE RefArticle NOT IN (
SELECT RefArticle FROM tbl1
)
) AS Essai
;

--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr