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 :

Requête avec EXISTS [AC-2000]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 41
    Points
    41
    Par défaut Requête avec EXISTS
    Bonjour,

    Je voudrais afficher les enregistrements d'une table qui ne sont pas dans le résultat d'une requête, j'ai ce code :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [Traçabilité-Composants].[Connecteur]
    FROM [Traçabilité-Composants], [ZZ-Liste des connecteurs en anomalie]
    GROUP BY [Traçabilité-Composants].[Connecteur], [Traçabilité-Composants].[OF]
    HAVING ((Exists (select * from [ZZ-Liste des connecteurs en anomalie] where [Traçabilité-Composants].Connecteur= [ZZ-Liste des connecteurs en anomalie].Connecteur))=False) AND (([Traçabilité-Composants].OF)=[Formulaires]![Menu principal]![Choix module controle]);

    La requête appelée [ZZ-Liste des connecteurs en anomalie] est comme suit :

    Code sql : 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
    17
    SELECT DISTINCT [6-T-Liste des contrôles ICU OM].[Connecteur]
    FROM [6-T-Liste des contrôles ICU OM]
    WHERE ((([6-T-Liste des contrôles ICU OM].OF)=[Formulaires]![Menu principal]![Choix module controle]) AND ((Exists (select * from [Traçabilité-Opérations] where [Traçabilité-Opérations].OF= [6-T-Liste des contrôles ICU OM].OF  and  [Traçabilité-Opérations].Connecteur= [6-T-Liste des contrôles ICU OM].Connecteur and  [Traçabilité-Opérations].[Opération]= [6-T-Liste des contrôles ICU OM].[Opération]))=False));
     
    UNION SELECT [Traçabilité-Composants].Connecteur
    FROM [Traçabilité-Composants]
    GROUP BY [Traçabilité-Composants].Connecteur, [Traçabilité-Composants].OF, [Traçabilité-Composants].[Commentaire PDA]
    HAVING ((([Traçabilité-Composants].OF)=[Formulaires]![Menu principal]![Choix module controle]) AND (([Traçabilité-Composants].[Commentaire PDA]) Is Not Null And ([Traçabilité-Composants].[Commentaire PDA])<>'Traces multiples'));
     
    UNION SELECT DISTINCT [5-T-Liste des Opérations ICU OM].Connecteur
    FROM [5-T-Liste des Opérations ICU OM]
    WHERE ((([5-T-Liste des Opérations ICU OM].OF)=[Formulaires]![Menu principal]![Choix module controle]) AND ((Exists (select * from [Traçabilité-Opérations] where [Traçabilité-Opérations].OF= [5-T-Liste des Opérations ICU OM].OF  and  [Traçabilité-Opérations].Connecteur= [5-T-Liste des Opérations ICU OM].Connecteur and  [Traçabilité-Opérations].[Opération]= [5-T-Liste des Opérations ICU OM].[Opération]))=False));
     
    UNION SELECT [Traçabilité-Composants].Connecteur
    FROM [Traçabilité-Composants]
    GROUP BY [Traçabilité-Composants].Connecteur, [Traçabilité-Composants].OF, [Traçabilité-Composants].[Trace Composant], IIf([Traçabilité-Composants].[Trace Composant] Is Null,'Traces manquantes','Traces remplies'), [Traçabilité-Composants].[Commentaire PDA], [Traçabilité-Composants].[Majeur de suppression], [Traçabilité-Composants].[Mineur de suppression], [Traçabilité-Composants].[NC de suppression]
    HAVING ((([Traçabilité-Composants].OF)=[Formulaires]![Menu principal]![Choix module controle]) AND ((IIf([Traçabilité-Composants].[Trace Composant] Is Null,'Traces manquantes','Traces remplies'))='Traces manquantes') AND (([Traçabilité-Composants].[Commentaire PDA]) Is Null) AND (([Traçabilité-Composants].[Majeur de suppression]) Is Null) AND (([Traçabilité-Composants].[Mineur de suppression]) Is Null) AND (([Traçabilité-Composants].[NC de suppression]) Is Null));

    La requête n'affiche simplement rien alors qu'elle devrait afficher 2 enregistrements (ils ne sont pas dans la requête [ZZ-Liste des connecteurs en anomalie]). J'ai également essayé avec Not In mais là la requête ne s'éxécute simplement pas (elle charge jusqu'à ce que j'appui sur CTRL+PAUSE).

    Je ne comprends pas où se trouve l'erreur d'autant plus que lorsque je transforme le false du exists en true Access m'affiche des enregistrements qui ne sont pas dans [ZZ-Liste des connecteurs en anomalie].

    Merci d'avance aux experts!

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Bonjour,

    Essaie de déplacer les critères de la clause HAVING dans la clause WHERE.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ....
    FROM ....
    WHERE ....
    GROUP BY ....
    En mode création cela se fait en changeant le type d'opération de "Regroupement" ou "Expression" en "Où".


    Enlève [ZZ-Liste des connecteurs en anomalie] de la clause FROM
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM [Traçabilité-Composants], [ZZ-Liste des connecteurs en anomalie]
    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    J'ai essayé, voici la nouvelle requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [Traçabilité-Composants].Connecteur
    FROM [Traçabilité-Composants]
    WHERE ((([Traçabilité-Composants].OF)=[Formulaires]![Menu principal]![Choix module controle]) AND ((Exists (select  [ZZ-Liste des connecteurs en anomalie].Connecteur from [ZZ-Liste des connecteurs en anomalie] where [Traçabilité-Composants].Connecteur= [ZZ-Liste des connecteurs en anomalie].Connecteur))=False))
    GROUP BY [Traçabilité-Composants].Connecteur;

    Malheureusement rien ne se passe...

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 768
    Points
    7 768
    Par défaut
    Là je ne sais pas trop.
    Est-ce que Access se mélange les pinceaux avec le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE [Traçabilité-Composants].Connecteur=
    de la sous-requête EXISTS ?

    [Traçabilité-Composants] peut en effet être interprété comme la table de la requête principale ou une des tables de la requête UNION.

    J'essaierai de mettre des alias aux noms des tables pour lever toute ambiguïté.

    D'abord au niveau de la requête principale.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TC.Connecteur
    FROM [Traçabilité-Composants] As TC
    WHERE (((TC.OF)=[Formulaires]![Menu principal]![Choix module controle]) AND ((EXISTS (SELECT  [ZZ-Liste des connecteurs en anomalie].Connecteur FROM [ZZ-Liste des connecteurs en anomalie] WHERE TC.Connecteur= [ZZ-Liste des connecteurs en anomalie].Connecteur))=False))
    GROUP BY TC.Connecteur;
    Et si ça ne marche pas, je le ferai dans la requête UNION [ZZ-Liste des connecteurs en anomalie].

    A+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    J'ai bien essayé de changer le nom de la table mais rien à faire...

    En faite en affichant le résultat du champ EXISTS je vois qu'il met FAUX pour tous, qu'il soit dans la seconde table ou non. Je ne comprends vraiment pas pourquoi Access ne fait pas la distinction entre "appartient à la table" et "n'appartient pas à la table".

    Je me suis résolu à ajouter un champ OF à la seconde table pour pouvoir utiliser une jointure externe gauche et ainsi faire mon tri, ce n'est pas très ergonomique mais au moins ça marche.

    Merci quand même d'avoir chercher avec moi!

    A plus tard.

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

Discussions similaires

  1. Requête avec EXISTS
    Par DeWaRs dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/09/2012, 10h01
  2. Optimisation de requêtes avec EXISTS
    Par Asfaloth dans le forum Requêtes
    Réponses: 1
    Dernier message: 19/06/2010, 08h16
  3. sql requête avec NOT EXISTS
    Par wang_xue dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/10/2007, 19h48
  4. Requête avec NOT EXISTS
    Par lodan dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/07/2007, 10h16
  5. Requète avec NOT EXISTS
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 23/09/2003, 15h20

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