执行以下mysql命令时,会出现相关的子查询 返回多行。
问题1.为什么MAX能够返回多行?
问题2.如何使用'='运算符来匹配多行?
SELECT Continent, Name, Population
FROM Country c
WHERE Population = (SELECT MAX(Population)
FROM Country c2
WHERE c.Continent=c2.Continent AND Population > 0);
+---------------+--------------------+------------+
| continent | name | population |
+---------------+--------------------+------------+
| Oceania | Australia | 18886000 |
| South America | Brazil | 170115000 |
| Asia | China | 1277558000 |
| Africa | Nigeria | 111506000 |
| Europe | Russian Federation | 146934000 |
| North America | United States | 278357000 |
+---------------+--------------------+------------+
6 rows in set (0.22 sec)
答案 0 :(得分:1)
from your comment above,此查询是您要查找的查询。这会处理重复项。
SELECT Continent, Name, Population
FROM Country c
WHERE Population = (SELECT MAX(Population) FROM Country)
另一个查询不处理重复的
SELECT Continent, Name, Population
FROM Country c
ORDER BY Population DESC
LIMIT 1
答案 1 :(得分:1)
发生的是这一部分:
WHERE c.Continent=c2.Continent AND Population > 0);
使外部查询返回国家/地区表中的每个大陆,以及人口最多的国家/地区(通过INNER查询中的MAX(人口))。
=
在这种情况下起作用,因为子查询只返回每个大洲的一行,但最终你仍然会得到每个大陆的结果,而不是总人口最多的国家。
与做同样的事情:
SELECT Continent, Name, Population
FROM Country c
WHERE c.Continent = 'Oceania'
AND Population = (SELECT MAX(Population)
FROM Country c2
WHERE c2.Continent = 'Oceania' AND Population > 0);
但是,由于您没有将Continents限制为特定的大陆,因此对于表中的每个大陆都会执行相同的操作。
如果您只想返回人口最多的国家/地区,您可以这样做:
SELECT Continent, Name, Population
FROM Country c
ORDER BY population DESC
LIMIT 1;