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.

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
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 ?

Merci d'avance !