What database are you using? Are you sure that intersect
is supported? I tried your query on Oracle (changing the table names to something corresponding to my DB) and it worked ok.
EDIT:
Since you confirmed you are using MS-Access, then it's clear that INTERSECT is the problem since it's not supported with MS-Access: http://www.access-programmers.co.uk/forums/archive/index.php/t-86531.html
EDIT2:
This is untested, but the basic idea is that you need to find all rows in your first query that exist in your second query. To do that, you will have to compare every column between the 2 queries for a match, as all the columns must match for it to be an "intersected" row.
There may be some syntax issues, but hopefully this gets you started.
SELECT r.col1
, t.col1
/* list all other columns here */
FROM results r
, types t
WHERE r.a = t.b
AND EXISTS (
SELECT *
FROM results r2
, types t2
WHERE r2.c = t2.b
AND NZ(r.col1,0) = NZ(r2.col1,0)
AND NZ(t.col1,0) = NZ(t2.col1,0)
/* list other columns here, they all need to match so intersection will work */
)