Bonjour à tous,
je rencontre un problème pour imbriquer deux requêtes, depuis ce matin je teste des solutions en m'aidant d'exemples trouvés ici et sur le net, mais rien à faire, je n'y arrive pas
Je recherche à éviter l'utilisation de
qui n'est pas optimisé (mais qui fonctionne néanmoins !)
Code : Sélectionner tout - Visualiser dans une fenêtre à part WHERE NOT IN (requete...)
Voilà la requête qui fonctionne avec la solution NOT IN :
J'ai lu que la parade pour ne pas utiliser la fonction NOT IN consistait à calculer le nombre d'article présent dans une première requête et filtrer dans une deuxième requête tous les articles ayant un nombre différent de zéro.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT tabArticles.idArticle, tabArticles.Article FROM tabArticles WHERE tabArticles.idArticle Not In (SELECT tabListes.refIdArticle FROM tabListes WHERE tabListes.refIdCourse=38);
En m'aidant de l'éditeur de requêtes d'ACCESS, j'ai réussi à faire ceci :
1) j'ai créé une requête que j'ai enregistré (reqArticleFiltreParCourse) qui sélectionne dans la tabListe tous les articles correspondant à l'IdListe que je choisi (ici 38)
2) je crée une seconde requête qui utilise la tabArticles mais aussi ma première requête reqArticleFiltreParCourse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT tabListes.refIdArticle FROM tabListes WHERE (((tabListes.refIdCourse)=38));
Cette requête compte tous les articles et sélectionne tous les articles qui ont pour valeur Nbre=0 :
Ca fonctionne aussi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT Count(reqArticleFiltreParCourse.refIdArticle) AS CompteDerefIdArticle, tabArticles.idArticle, tabArticles.Article FROM tabArticles LEFT JOIN reqArticleFiltreParCourse ON tabArticles.idArticle = reqArticleFiltreParCourse.refIdArticle GROUP BY tabArticles.idArticle, tabArticles.Article HAVING (((Count(reqArticleFiltreParCourse.refIdArticle))=0));
Maintenant, j'aimerais pour regrouper ces deux requêtes en une seule, afin de pouvoir la manipuler plus simplement en vba.
Pour l'instant, je suis arrivé à :
mais je n'arrive pas à passer mes critères tabListes.refIdCourse=38 et Count(tabListes.refIdArticle))=0 car ça ne me retourne pas le bon résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT tabArticles.idArticle, tabArticles.Article, tabListes.refIdCourse, Count(tabListes.refIdArticle) AS CompteDerefIdArticle FROM tabArticles LEFT JOIN tabListes ON tabArticles.idArticle = tabListes.refIdArticle GROUP BY tabArticles.idArticle, tabArticles.Article, tabListes.refIdCourse;
Sans doute parce que mes jointures sont mal écrites, mais malgré mes tentatives et les exemples que j'ai suivi, je n'arrive pas à comprendre la logique.
Quelqu'un peut m'aider ?
Merci,
Jean-Marc
Partager