ridders52,
You did have the right idea, although you slightly misunderstood my initial question, and actually gave me a more concise (better!) answer in the end, but actually what I was looking to do was write all possible text strings out - because I am a newbie to Access, it helps me to keep track on whats going on! In other words I wrote your SolicitCodesToIgnore as:
SELECT DISTINCT Solicit.ContactID, Solicit.SolicitCode, Attribute.AttributeCode
FROM Attribute INNER JOIN Solicit ON Attribute.ContactID = Solicit.ContactID
WHERE ((Solicit.SolicitCode="Email opt in" AND Attribute.AttributeCode="Email opt out") OR
(Solicit.SolicitCode="Email opt out" AND Attribute.AttributeCode="Email opt in") OR
(Solicit.SolicitCode="Postal opt in" AND Attribute.AttributeCode="Postal opt out") OR
(Solicit.SolicitCode="Postal opt out" AND Attribute.AttributeCode="Postal opt in") OR
(Solicit.SolicitCode="Telephone opt in" AND Attribute.AttributeCode="Telephone opt out") OR
(Solicit.SolicitCode="Telephone opt out" AND Attribute.AttributeCode="Telephone opt in") OR
(Solicit.SolicitCode="SMS opt in" AND Attribute.AttributeCode="SMS opt out") OR
(Solicit.SolicitCode="SMS opt out" AND Attribute.AttributeCode="SMS opt in"));
But basically I understood all your queries (well, actually the SolcitCodesToKeep only partly, but the important thing is it returns the correct data!), and have adapted to my use.
And the point is that you have solved the problem!
You have no idea how much I have appreciated your help. I would have not been able to deliver what I am doing at the moment for a client.
So an immense thank you to you!!!
If there is something I can do for you in return, just let me know!