Bonjour à tous,
J’utilise la requête suivante destinée à faire du publipostage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT p.id_personne FROM personnes AS p INNER JOIN flux AS f ON p.id_personne = f.id_personne WHERE p.id_personne Not In (SELECT id_personne FROM query_exclusion) AND p.date_reponse IS NULL AND p.reponse IS NULL AND p.id_personne In (SELECT id_personne FROM flux WHERE id_document=1) AND p.id_personne Not In (SELECT id_personne FROM flux WHERE id_document=15) GROUP BY p.id_personne HAVING DateDiff("d",Last(f.date_operation),Date())>=30;
Mon problème est que comme vous pouvez le voir, celle-ci contient 3 instructions NOT IN. Je sais qu’Access ne sait pas utiliser l’index avec cette instruction. Ma requête est donc très lente à s’exécuter.
Je voudrais la modifier de façon à supprimer les NOT IN. J’ai pensé à utiliser les jointures. J’ai commencé à faire quelque chose comme ça.
Cependant ce n’est pas correct (Syntax error (missing operateur) in query expression). Malgré mes recherches je ne trouve pas la solution. Quelqu’un peut-il m’aiguiller svp ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT p.id_personne FROM personnes AS p RIGHT JOIN flux f ON p.id_personne = f.id_personne AND f.id_document = 1 RIGHT JOIN flux f2 ON p.id_personne = f2.id_personne AND f2.id_document <> 5 WHERE p.date_reponse IS NULL AND p.reponse IS NULL
Merci d'avance !
Partager