सबसे पहले, किसी क्षेत्र में अल्पविराम से अलग किए गए मानों का उपयोग करना समस्याग्रस्त है, और आपको इसके बजाय उन्हें एक अलग तालिका में संग्रहीत करने पर विचार करना चाहिए। तब आप रिकॉर्ड को अधिक कुशलता से प्राप्त कर सकते हैं:
select ...
from mainTable t
inner join valueTable v1 on v1.id = t.id and v1.value = 1
inner join valueTable v2 on v2.id = t.id and v2.value = 2
inner join valueTable v3 on v3.id = t.id and v3.value = 3
यदि यह संभव नहीं है, तो आपको धीमी स्ट्रिंग मिलान के रास्ते पर जाना होगा। अल्पविराम से अलग किए गए स्ट्रिंग में मानों का मिलान करने के लिए, आप like
. का उपयोग कर सकते हैं ऑपरेटर:
... where
concat(',', someField, ',') like '%,1,%' and
concat(',', someField, ',') like '%,2,%' and
concat(',', someField, ',') like '%,3,%'
सेपरेटर को खोजे गए मान के दोनों ओर रखने से यह सुनिश्चित होता है कि आपको कोई झूठी सकारात्मकता नहीं मिलती है। फ़ील्ड मान से पहले और बाद में अल्पविराम जोड़ना सुनिश्चित करता है कि आप पहला और अंतिम मान पा सकते हैं।