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 :

req. de non correspondance renvoient des lignes qui correspondent


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 17
    Points
    17
    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 ?

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    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 ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    req1 : SELECT a, b, c, d, e FROM table1 WHERE ... ORDER BY a;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    req2 : SELECT a, b, c, d, e FROM table2 WHERE ... ORDER bY a;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    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.

  6. #6
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    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.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    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

    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.

  8. #8
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    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 ?

Discussions similaires

  1. Réponses: 13
    Dernier message: 07/01/2015, 15h39
  2. Réponses: 0
    Dernier message: 27/03/2012, 12h26
  3. Afficher des lignes qui n'ont pas de résultat
    Par Nessie37 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 25/10/2007, 16h11
  4. suppression des lignes qui se répètent
    Par linooo dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/06/2007, 15h49
  5. UNION ? des lignes qui ne sont pas prises...
    Par fred23195 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/12/2005, 14h50

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