select id
from t
where (meta_key = 'color' and meta_value = 'red') or
(meta_key = 'price' and meta_value = '10')
group by id
having count(distinct meta_key) = 2;
В having count(distinct meta_key) соотв. количество проверяемых пар ключ/значение. Если проверяем в паре диапазон то так:
(meta_key = 'price' and meta_value > 100 and meta_value <= 100500)
select id,
max( case when meta_key ='color' then meta_value else '' end ) as 'color',
max( case when meta_key ='price' then meta_value else '' end ) as 'price'
from table group by id