我有一个名为world
的数据库。
该数据库有两个表:city
和country
。
city
的列包括:name
,ID
,Population
,countryCode
。
country
的列包括:Code
,name
,countryPopulation
,Capital
。
countryCode
位于city
表中的Code
table = country
{li> ID
位于city
表中的capital
table = country
撰写一个查询,显示首都所列出的所有城市中最大的城市及其所在国家/地区的名称。
以下是显示最大城市列表的代码:
SELECT MAX(c.Population) AS Population, c.Name AS City, cou.Name AS Country
FROM city c, country cou
WHERE c.CountryCode = cou.Code
GROUP BY cou.Name
假设我有以前代码中的信息:
Population City Country
1000000 Washington DC USA
993943210 Sao Paulo Brazil
1911919 Dubai UAE
我的询问应该显示美国的所有城市,因为华盛顿特区是美国的首都和阿联酋的所有城市,因为迪拜是阿联酋的首都,但不应该在巴西显示城市,因为圣保罗不是巴西的首都。
答案 0 :(得分:1)
您需要客户的姓名以及他们居住的城市的名称。城市名称存储在称为“城市”的单独表中。
RIGHT
SELECT customers.name, cities.name
FROM customers
OUTER JOIN cities
ON cities.id=customers.city_id;
答案 1 :(得分:0)
您可以使用此查询:
SELECT c.name AS city_name, cou.name AS country_name
FROM city c LEFT JOIN country cou ON c.countrycode = cou.code
LEFT JOIN city c2 ON cou.capital = c2.id
LEFT JOIN (SELECT countrycode, MAX(population) AS max_pop
FROM city
GROUP BY countrycode) t
ON cou.code = t.countrycode
WHERE c2.population = t.max_pop
第二个LEFT JOIN
允许获取该国家/地区的资本(c2.population
)。
第三个LEFT JOIN
允许获取该国最大城市(t.max_pop
)的人口。
我们只保留这两个数字相等的城市。