group by
を使用してこれらにアプローチするのが好きです およびhaving
:
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;
別の方法は、join
です。 。 id
に重複する値がない場合 :
select id
from t tc join
t tp
on tc.id = tp.id and
tc.meta_key = 'color' and tc.meta_value = 'red' and
tp.meta_key = 'price' and tp.meta_value = '10';
group by
メソッドには、スケーラビリティと表現力の利点があります。単純な平等ではない多くの条件(色は赤ではなく、米国または中国で製造されています)を簡単に表現できます。また、追加の条件のパフォーマンスは非常に似ています。
2つ目は、いくつかの条件で(適切なインデックスを使用して)パフォーマンスが向上する可能性があります。