हां। आपके पास क्या काम करना चाहिए। (आपको व्युत्पन्न तालिका पर एक उपनाम जोड़ने की आवश्यकता होगी, आपको जो त्रुटि संदेश मिलता है वह स्वयं व्याख्यात्मक होना चाहिए। ठीक करने में आसान, बस अपनी क्वेरी के अंत में एक स्थान और अक्षर c (या जो भी नाम आप चाहते हैं) जोड़ें।पी>
डुप्लिकेट (VoterID, ElectionID)
. की संभावना के संबंध में एक चेतावनी है टुपल्स।
यदि आपके पास (वोटर आईडी, इलेक्शनआईडी) पर एक अद्वितीय बाधा है, तो आपकी क्वेरी ठीक काम करेगी।
यदि आपके पास एक अद्वितीय बाधा नहीं है (जो डुप्लिकेट (VoterID, ElectionId)
की अनुमति नहीं देता है। ), तो एक मतदाता के लिए इलेक्शनआईडी 1 के लिए दो (2) पंक्तियों के साथ, और इलेक्शनआईडी 2 के लिए कोई पंक्ति नहीं होने की संभावना है... उस मतदाता के गिनती में शामिल होने की संभावना है। और एक मतदाता जिसने इलेक्शनआईडी 1 में दो बार और इलेक्शनआईडी 2 में केवल एक बार मतदान किया, उस मतदाता को गणना से बाहर कर दिया जाएगा।
COUNT के अंदर DISTINCT कीवर्ड शामिल करने से वह समस्या ठीक हो जाएगी, उदा.
HAVING COUNT(DISTINCT ElectionID) = 2
मैं क्वेरी को अलग तरीके से लिखूंगा, लेकिन आपके पास जो होगा वह काम करेगा।
बेहतर प्रदर्शन के लिए इलेक्शनआईडी 1 और इलेक्शनआईडी2 दोनों में भाग लेने वाले VoterID की गिनती प्राप्त करने के लिए, मैं एक इनलाइन व्यू (MySQL इसे एक व्युत्पन्न तालिका कहता है) का उपयोग करने से बचूंगा। मेरे पास क्वेरी इसके बजाय जॉइन ऑपरेशन का उपयोग करेगी। कुछ इस तरह:
SELECT COUNT(DISTINCT e1.voterID) AS NumVoters
FROM elections e1
JOIN elections e2
ON e2.voterID = e1.voterID
WHERE e1.electionID = 1
AND e2.electionID = 2
अगर आपको गारंटी दी जाती है कि (voterID, ElectionID)
अद्वितीय है, तो चयन आसान हो सकता है:
SELECT COUNT(1) AS NumVoters
FROM elections e1
JOIN elections e2
ON e2.voterID = e1.voterID
WHERE e1.electionID = 1
AND e2.electionID = 2