I'm working on generating reports for data contained within a large pre-existing Access database (~500 mb after compact & repair), and I'm having trouble with a slow subquery.
The database has a big table which contains a record of every customer purchase. Here's a simple query which finds customers who have bought a blue widget. It completes within a few seconds and returns about ten thousand records.
SELECT DISTINCT CustomerId
FROM ProductSales
WHERE Product = 'BLUE'
Here's a query which tries to find customers who have bought a blue widget, but not a red widget. It takes about an hour to run.
SELECT DISTINCT CustomerId FROM ProductSales
WHERE Product = 'BLUE'
AND CustomerId NOT IN (
SELECT CustomerId
FROM ProductSales
WHERE Product = 'RED'
)
Is there a way to refactor the second query to make it take a few minutes instead of an hour?