2009-04-22 16 views
17

मैं इस क्वेरी को क्रियान्वित कर रहा हूँ:MySQL सबक्वेरी रिटर्न एक से अधिक पंक्तियां

SELECT 
    voterfile_county.Name, 
    voterfile_precienct.PREC_ID, 
    voterfile_precienct.Name, 
    COUNT((SELECT voterfile_voter.ID 
FROM voterfile_voter 
JOIN voterfile_household 
WHERE voterfile_voter.House_ID = voterfile_household.ID 
AND voterfile_household.Precnum = voterfile_precienct.PREC_ID)) AS Voters 
FROM voterfile_precienct JOIN voterfile_county 
WHERE voterfile_precienct.County_ID = voterfile_County.ID; 

मैं यह कुछ इस तरह वापसी बनाने के लिए कोशिश कर रहा हूँ:

County_Name Prec_ID Prec_Name Voters(Count of # of voters in that precienct) 

हालांकि, मैं हो रही है त्रुटि:

#1242 - Subquery returns more than 1 row.

मैंने subquery में COUNT कथन डालने का प्रयास किया है, लेकिन मुझे एक अवैध वाक्यविन्यास एर मिलता है ROR।

+0

@ Dropped.on.Caprica स्मार्ट-गधे होने से रोकें। यह डेटा सार्वजनिक है। आप इसे सीखने के उद्देश्यों के लिए स्वयं प्राप्त कर सकते हैं। – Eimantas

+0

@Eimantas उनके प्रश्न इतिहास और उत्तर पर टिप्पणियां अन्यथा सुझाव देने लगती हैं। किसी भी तरह से, मैं कर रहा हूँ। –

उत्तर

13

आप द्वारा सबक्वेरी के बिना यह कोशिश कर सकते हैं, एक सरल समूह के साथ प्रयास करें:

SELECT voterfile_county.Name, 
    voterfile_precienct.PREC_ID, 
    voterfile_precienct.Name, 
    count(voterfile_voter.ID) 
FROM voterfile_county 
JOIN voterfile_precienct 
    ON voterfile_precienct.County_ID = voterfile_County.ID 
JOIN voterfile_household 
    ON voterfile_household.Precnum = voterfile_precienct.PREC_ID 
JOIN voterfile_voter 
    ON voterfile_voter.House_ID = voterfile_household.ID 
GROUP BY voterfile_county.Name, 
    voterfile_precienct.PREC_ID, 
    voterfile_precienct.Name 

जब आप ग्रुप द्वारा, किसी भी स्तंभ पर समूहीकरण नहीं कर रहे हैं होना चाहिए का उपयोग एक समग्र खंड (fe SUM या COUNT।) तो इस मामले में आपको काउंटी नाम, precienct.id और precient.name पर समूह करना होगा।

+0

जो काम करता है, निष्पादित करने के लिए 92.5746 सेकेंड लग गए और परिणाम सेट को वापस कर दिया। इसे गति देने के बारे में कोई विचार? – gsueagle2008

+0

क्या आपके पास संबंधों के लिए विदेशी कुंजी है? इससे मदद मिल सकती है। – Andomar

+0

इसे गति देने के लिए जुड़ने वाले सभी कॉलम के लिए अनुक्रमणिका जोड़ें। यदि परिणाम सेट बड़ा है, तो आप इसे कम करने के लिए जो कुछ भी करते हैं, वह भी इसे तेज करेगा। –

3

इस

SELECT 
voterfile_county.Name, voterfile_precienct.PREC_ID, 
voterfile_precienct.Name, 
    (SELECT COUNT(voterfile_voter.ID) 
    FROM voterfile_voter JOIN voterfile_household 
    WHERE voterfile_voter.House_ID = voterfile_household.ID 
     AND voterfile_household.Precnum = voterfile_precienct.PREC_ID) as Voters 
FROM voterfile_precienct JOIN voterfile_county 
ON voterfile_precienct.County_ID = voterfile_County.ID 
+0

यह कहता है कि क्वेरी निष्पादित की जा रही है, जो मुझे मिल गया है उससे कहीं अधिक है। लेकिन कोई पासा नहीं। – gsueagle2008

+0

शामिल होने का प्रयास करने का प्रयास करें, –

+0

अपडेट करने वाला है, यह अभी भी अभी लटक रहा है। – gsueagle2008

59

यदि आपको त्रुटि मिलती है: त्रुटि संख्या 1242 सबक्वायरी एक से अधिक पंक्तियां लौटाती है, तो अपनी सबक्वायरी से पहले किसी को भी डालने का प्रयास करें। उदाहरण के लिए:

इस क्वेरी वापसी त्रुटि:

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); 

यह वह जगह है अच्छा क्वेरी:

SELECT * FROM t1 WHERE column1 = ANY (SELECT column1 FROM t2); 
+1

यह वही है जो मुझे मेरी समस्या के लिए जरूरी था। धन्यवाद! –

+6

कॉलम 1 = कोई (सबक्वायरी) क्यों काम करता है और कॉलम 1 में नहीं (subquery)? क्या यह एक ही रिलेशनल तर्क को फिर से नहीं बनाता है? – Prusprus

+0

इस तालिका से एक चयनित कथन के आधार पर पंक्तियों को अपडेट करने के साथ मेरी समस्या हल हो गई। – Patrick

3

नीचे दिए गए उदाहरण देखें और उसके अनुसार अपनी क्वेरी को संशोधित।

select COUNT(ResultTPLAlias.id) from 
(select id from Table_name where ....) ResultTPLAlias; 
संबंधित मुद्दे