2012-09-17 15 views
8

में घूमने वाले प्रश्नों का लक्ष्य देश की नाम और उसके राज्य के राज्य को वापस करना है यदि हेडफोस्टेट का नाम ए से शुरू हो रहा है, और देश की राजधानी में 100,000 से अधिक लोग नेस्टेड क्वेरी का उपयोग कर रहे हैं।एसक्यूएल

SELECT country.name as country, 
     (SELECT country.headofstate 
     from country 
     where country.headofstate like 'A%')  
from country, city 
where city.population > 100000; 

मैं इसे पीछे की कोशिश की है, जहां खंड आदि मैं नेस्टेड प्रश्नों नहीं मिलता है में रखने से:

यहाँ मेरी क्वेरी है। मुझे बस त्रुटियां मिल रही हैं, जैसे "सबक्वायरी एक से अधिक पंक्ति लौटाती है" और ऐसे। अगर कोई इसे आदेश देने के तरीके में मेरी मदद कर सकता है, और समझाता है कि इसे एक निश्चित तरीके से क्यों जरूरी है, तो यह बहुत अच्छा होगा।

उत्तर

15

यह "नेस्ट" हो गया है, तो यह एक तरह से हो सकता है, अपने काम करने के लिए:

SELECT o.name AS country, o.headofstate 
FROM country o 
WHERE o.headofstate like 'A%' 
AND (
    SELECT i.population 
    FROM city i 
    WHERE i.id = o.capital 
    ) > 100000 

JOIN एक सहसंबंधित सबक्वायरी से अधिक कुशल होगा, हालांकि। क्या यह हो सकता है कि जिसने आपको कभी यह कार्य दिया है वह खुद को गति देने के लिए नहीं है?

+0

यदि मैं इस प्रकार की एसक्यूएल क्वेरी का उपयोग करता हूं तो यह मुझे नीचे की त्रुटि दिखा रहा है । संकार्य 1 कॉलम (रों) को शामिल करना चाहिए तुम मुझे मदद कर सकता हूँ .... मेरे SQL क्वेरी j5749_faculty_subjects से चयन रों है। * एस के रूप में जहां s.subjectid = '1' और ( \t \t एक का चयन करें। * \t '> 100000': अपनी क्वेरी में अंतिम भाग देखें: एक \t \t कहां a.facultyid = s.facultyid और a.timeid = '3' ) – Amit

+0

@amit रूप \t j5749_facultyavailablity से। आपके पास कोई समकक्ष नहीं है। आप शायद 'EXISTS' चाहते हैं। [इस उदाहरण को देखें।] (Http://stackoverflow.com/questions/14251180/find-records-where-join-doesnt-exist/14260510#14260510) अन्यथा, सभी विवरणों के साथ * नया प्रश्न * शुरू करें। –

7

आपको दो तालिकाएं join और फिर where खंड में परिणाम फिल्टर करने के लिए की जरूरत है:

SELECT country.name as country, country.headofstate 
from country 
inner join city on city.id = country.capital 
where city.population > 100000 
and country.headofstate like 'A%' 
+0

आपकी मदद के लिए धन्यवाद! और हालांकि यह पूरी तरह से काम करता है, और समझ में आता है, मुझे घोंसला वाले प्रश्नों का उपयोग करना चाहिए। क्या आपके पास कोई विकल्प है? – ZAX

+1

@ZAX यदि आपको नेस्टेड क्वेरी की आवश्यकता है, तो मेरा जवाब देखें ... :-) – aleroot

+2

@ZAX डियर मैं पूछता हूं कि क्यों, पृथ्वी पर, आप नेस्टेड प्रश्नों का उपयोग करने के लिए ** ** ** दबाया है? क्या यह होमवर्क है? चूंकि नेस्टेड प्रश्न इस समस्या के लिए सबसे अच्छा समाधान भी नहीं हैं –

0

जिस तरह से मैं इसे देखता हूं, घोंसला वाली क्वेरी के लिए एकमात्र जगह WHERE खंड में होगी, इसलिए उदा।

SELECT country.name, country.headofstate 
FROM country 
WHERE country.headofstate LIKE 'A%' AND 
country.id in (SELECT country_id FROM city WHERE population > 100000) 

इसके अलावा, मुझे एड्रियन से सहमत होना है: क्यों आपको हेड किए गए प्रश्नों का उपयोग करना चाहिए?

1

नीचे दी गई क्वेरी आपको जो चाहिए वह प्राप्त करने में आपकी सहायता करनी चाहिए।

select scountry, headofstate from data 
where data.scountry like 'a%'and ttlppl>=100000