मैं 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
विधि में मापनीयता और अभिव्यक्तता का लाभ है। कई शर्तों को व्यक्त करना आसान है (रंग लाल नहीं है, अमेरिका या चीन में निर्मित है) जो साधारण समानता नहीं हैं। साथ ही, अतिरिक्त स्थितियों का प्रदर्शन बहुत समान होता है।
दूसरा संभवत:कुछ स्थितियों में बेहतर (सही अनुक्रमणिका के साथ) प्रदर्शन करता है।