Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2010, 10h33   #1
Invité de passage
 
Inscription : mars 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 26
Points : 3
Points : 3
Par défaut req. de non correspondance renvoient des lignes qui correspondent

Bonjour,

J'ai fait une requete de non correspondance sous Access 2010 qui fonctionne assez bien sauf qu'elle me retourne des lignes en trop sans que je sache exactement pourquoi. Je m'explique :

J'ai une requete 1 qui sélectionne les champs a, b, c, d ,e d'une table 1 selon certains critères et qui me renvoie 544 lignes.
une requete 2 qui sélectionne les mêmes champs a ,b, c, d, e d'une autre table selon certains critères qui me renvoie 534 lignes.
J'ai ma 3e requete de non correspondance qui me retourne 26 lignes ; les 10 lignes qui correspondent bien à ma différence entre req1 et req2 + 16 autres lignes qui, en vérifiant, sont pourtant bien identiques et présentes dans req1 et req2.

Je me suis aperçue qu'en modifiant à la main dans la table2 la valeur du champs d, la ligne correspondante disparaît de la req3 de non correspondance (càd : admettons que le champs d de la table 2 pour la ligne concernée vaut 50, alors je supprime la valeur, j'enregistre la table, je réécris à la main 50, j'enregistre, je ré execute req3 et là je n'ai plus que 25 lignes) et c'est la même chose pour mes 16 lignes en trop.

J'ai bien regardé il n'y avait pas d'espace avant ou après le "50", je ne vois pas de quoi il peut s'agir ... si quelqu'un a une idée ?
marinaetsonchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 11h36   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 804
Points : 2 804
Bonjour Marinaetsonchat,

Sans doute, un problème dans les liaisons.

Peux-tu poster ta Table1 simplifiée, ta Table2 simplifiée et tes requêtes simplifiées ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 13h28   #3
Invité de passage
 
Inscription : mars 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 26
Points : 3
Points : 3
En fait dans ma table 1 le champ d est de type Numérique, alors que dans la table 2 le champ d est de type Monétaire, peut être est-ce pour ca? Les autres champs sont de même type entre eux. Mais bon sur 500 lignes pourquoi cette différence de type ne poserait problème que pour quelques lignes ... ?

Code :
req1 : SELECT a, b, c, d, e FROM table1 WHERE ... ORDER BY a;
Code :
req2 : SELECT a, b, c, d, e FROM table2 WHERE ... ORDER bY a;
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
req3 : SELECT req1.a, 
req1.b, 
req1.c, 
req1.d, 
req1.e
FROM req1 LEFT JOIN req2 
ON req1.a = req2.a 
AND req1.b = req2.b 
AND req1.c = req2.c 
AND req1.d = req2.d 
AND req1.e = req2.e 
WHERE req2.a Is Null 
AND req2.b Is Null
AND req2.c Is Null 
AND req2.d Is Null 
AND req2.e Is Null
marinaetsonchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 14h44   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 804
Points : 2 804
Dans la Table1, n'y-a-t-il pas des (a,b,c,d,e)=Null ?

Pour tester simplement, modifies ta req3 (via l'assistant) :
Code :
1
2
3
SELECT req1.a, req1.b, req1.c, req1.d, req1.e
FROM req1 LEFT JOIN req2 ON (req1.e = req2.e) AND (req1.d = req2.d) AND (req1.c = req2.c) AND (req1.b = req2.b) AND (req1.a = req2.a)
WHERE (((req1.a) Is Not Null) AND ((req1.b) Is Not Null) AND ((req1.c) Is Not Null) AND ((req1.d) Is Not Null) AND ((req1.e) Is Not Null) AND ((req2.a) Is Null) AND ((req2.b) Is Null) AND ((req2.c) Is Null) AND ((req2.d) Is Null) AND ((req2.e) Is Null));
Le but étant de ne sélectionner que les enregistrements de Table1 liés à Table2, via (a,b,c,d,e) avec Table1(a,b,c,d,e)<>Null et Table2(a,b,c,d,e)=Null.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 15h43   #5
Invité de passage
 
Inscription : mars 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 26
Points : 3
Points : 3
non il n'y a pas d'enregistrements null.
La requête modifiée avec table1<>null et table2=0 donne le même résultat.

J'ai par exemple la ligne avec les valeurs suivantes qui apparait dans ma req3, dans req 1 et dans req2 identiques :
a = BL112285
b = POMPE
c = 3
d = 32,34
e = DP
Aucune valeur null ni dans req1, ni dans req2. On a cette même ligne dans les 2 requetes. Quand j'execute req2 je vois bien dans le champ d 32,34, mais c'est comme si req2.d était vide pour req3 pour cet enregistrement.
marinaetsonchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 15h58   #6
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 804
Points : 2 804
2 choses :
  • dans la requête il faut qu'il y ait "Is Not Null" ou "Is Null" (et non pas "<> Null", "= Null", "= 0" ou "<> 0" ;
    ==> vérifies d'abord cela.
  • sinon, copies uniquement, ce record dans deux tables identiques de test (Table1 et Table2 de test auront donc 1 seul enregistrement, celui de ton exemple).
    ==> je ne pense pas que req3 (sur ces deux tables de test) trouve un enregistrement.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 13h49   #7
Invité de passage
 
Inscription : mars 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 26
Points : 3
Points : 3
Citation:
dans la requête il faut qu'il y ait "Is Not Null" ou "Is Null" (et non pas "<> Null", "= Null", "= 0" ou "<> 0" ;
==> vérifies d'abord cela.
oui oui il y a bien Is Null ou Is Not Null

Citation:
sinon, copies uniquement, ce record dans deux tables identiques de test (Table1 et Table2 de test auront donc 1 seul enregistrement, celui de ton exemple).
==> je ne pense pas que req3 (sur ces deux tables de test) trouve un enregistrement.
j'ai fait 2 tables de test et copier-collé les 2 lignes des tables d'origine, je dis bien copier-coller les lignes entières des tables d'origine aux tables test, je n'ai pas resaisi les lignes. req3 me retourne tjs cette ligne comme non correspondante. par contre si je fais Ctrl X sur le champ en question, puis Ctrl V, Ctrl S et que je réexecute req3, la ligne n'est pas retournée.
marinaetsonchat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 14h56   #8
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 804
Points : 2 804
Bonjour Marinaetsonchat,

"Le champ en question" doit comporter un caractère de contrôle que tu ne vois pas. Il a, peut-être, été importé d'un fichier externe ou l'utilisateur qui a saisi l'information a fait "Alt"+quelque chose.

Je n'ai pas trouvé, dans Access, l'équivalent de la fonction EPURAGE de Excel.

Peux-tu m'envoyer une base Access comportant, uniquement, les 2 tables avec un seul (et même) enregistrement supposé mais qui est reconnu différent dans ta requête ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h25.


 
 
 
 
Partenaires

Hébergement Web