2012-09-17 271 views
8

我的查询的目标是返回国家名称和它的国家元首,如果它的headofstate的名称以A开头,并且该国的首都有超过100,000人使用嵌套查询。在SQL中嵌套查询

这里是我的查询:

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

我试图扭转这一局面,将其放置在where子句等我不明白嵌套查询。我只是收回错误,像“子查询返回多行”等。如果有人能够帮助我如何订购它,并解释为什么它需要某种方式,那会很棒。

回答

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 

A JOIN会比相关的子查询更有效率。难道那些曾经给过你这个任务的人不能加速自己吗?

+0

如果我使用这种sql查询,那么它会显示如下的错误。操作数应包含1列()你能帮助我....我的SQL查询的SELECT * FROM j5749_faculty_subjects为S WHERE s.subjectid = '1' AND( \t \t选择一个。* \t \t FROM j5749_facultyavailablity作为 \t \t WHERE a.facultyid = s.facultyid AND a.timeid = '3' ) – Amit

+0

@amit:见我的查询中的最后一部分:'> 100000'。你没有相同的东西。你可能想要'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