我是mysql的新手,刚刚开始学习它。昨晚,我试图将以下对世界数据库的国家/地区表进行的子查询重组为联接。

SELECT continent, NAME, population FROM country c WHERE
population = (SELECT MAX(population) FROM country c2
WHERE c.continent=c2.continent AND population > 0)


我尝试了以下查询以及带有内部联接等的其他几个查询,但是失败了。我得到以下查询的结果,其中最大人口是预期的但大陆和国家/地区名称不同。

SELECT c.continent, c2.name, MAX(c2.population) AS pop FROM country  c, country c2
WHERE c.continent = c2.continent GROUP BY continent


请帮助,如何获得与上述子查询相同的结果。

提前致谢

最佳答案

您应该在子查询中将MAX(population)GROUP BY continent一起使用,然后将JOIN与表本身一起使用。像这样:

SELECT c1.continent, c1.NAME, c1.population
FROM country c1
INNER JOIN
(
   SELECT continent, MAX(population) AS Maxp
   FROM country
   WHERE population > 0
   GROUP BY continent
) AS c2  ON c1.population = c2.maxp
        AND c1.continent  = c2.continent;

关于mysql - 将mysql子查询转换为Join,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18041388/

10-12 03:16