हमारे पास एक तालिका है जिसका उपयोग हम प्रश्नों के उत्तर संग्रहीत करने के लिए करते हैं। हमें उन उपयोगकर्ताओं को खोजने में सक्षम होना चाहिए जिनके पास कुछ विशेष प्रश्नों के उत्तर हैं। इसलिए, यदि हमारी तालिका में निम्नलिखित डेटा हैं:
user_id question_id answer_value
Sally 1 Pooch
Sally 2 Peach
John 1 Pooch
John 2 Duke
और हम उन उपयोगकर्ताओं को खोजना चाहते हैं जो प्रश्न 1 के लिए 'पूच' और प्रश्न 2 के लिए 'पीच' का उत्तर देते हैं, निम्नलिखित एसक्यूएल इच्छाशक्ति (स्पष्ट रूप से) खराब नहीं होगी:
select user_id
from answers
where question_id=1
and answer_value = 'Pooch'
and question_id=2
and answer_value='Peach'
मेरा पहला विचार था कि हम जिस उत्तर की तलाश कर रहे हैं, उसके लिए तालिका में स्वयं शामिल हों:
select a.user_id
from answers a, answers b
where a.user_id = b.user_id
and a.question_id=1
and a.answer_value = 'Pooch'
and b.question_id=2
and b.answer_value='Peach'
यह काम करता है, लेकिन जब से हम खोज फ़िल्टर की एक मनमानी संख्या की अनुमति देते हैं, हमें कुछ और अधिक कुशल खोजने की आवश्यकता है। मेरा अगला हल कुछ इस तरह था:
select user_id, count(question_id)
from answers
where (
(question_id=2 and answer_value = 'Peach')
or (question_id=1 and answer_value = 'Pooch')
)
group by user_id
having count(question_id)>1
हालाँकि, हम चाहते हैं कि उपयोगकर्ता एक ही प्रश्नावली को दो बार लेने में सक्षम हों, इसलिए वे संभावित रूप से उत्तर तालिका में प्रश्न 1 के दो उत्तर दे सकते हैं।
इसलिए, अब मैं नुकसान में हूं। इसके लिए सबसे अच्छा तरीका क्या है? धन्यवाद!