Ik gebruik hiervoor graag aggregatie met voorwaardelijke aggregatie. Bijvoorbeeld voor uw eerste opsommingsteken:
select a.carid
from attributes a
group by a.carid
having sum( (attribute, value) in ( ('color', 'red'), ('color', 'blue') ) ) > 0 and
sum( (attribute, value) in ( ('wheels', '2') ) > 0;
De > 0
betekent dat de attribuut/waarde-combinatie bestaat. Gebruik = 0
om aan te geven dat het niet werkt.