2009-11-28 1 views
1

Я использую базу данных MySQL WORLD.База данных MySQL MySQL Попытка избежать подзапроса

Для каждого континента я хочу вернуть название страны с наибольшим населением.

Мне удалось найти запрос, который работает. Попытка найти другой запрос, который использует только соединение, и избежать подзапроса.

Есть ли способ написать этот запрос, используя JOIN?

SELECT Continent, Name 
FROM Country c1 
WHERE Population >= ALL (SELECT Population FROM Country c2 WHERE c1.continent = c2.continent); 

+---------------+----------------------------------------------+ 
| Continent  | Nanme           | 
+---------------+----------------------------------------------+ 
| Oceania  | Australia         | 
| South America | Brazil          | 
| Asia   | China          | 
| Africa  | Nigeria          | 
| Europe  | Russian Federation       | 
| North America | United States        | 
| Antarctica | Antarctica         | 
| Antarctica | Bouvet Island        | 
| Antarctica | South Georgia and the South Sandwich Islands | 
| Antarctica | Heard Island and McDonald Islands   | 
| Antarctica | French Southern territories     | 
+---------------+----------------------------------------------+ 
11 rows in set (0.14 sec) 
+0

WHERE c1.continent = c2.continent является соединением – Galen

+0

Я хочу переписать запрос, чтобы избежать подзапроса и использовать только Join. – Yada

ответ

5

Это проблема «величайшая-н-за группу», которая приходит часто на StackOverflow.

SELECT c1.Continent, c1.Name 
FROM Country c1 
LEFT OUTER JOIN Country c2 
    ON (c1.continent = c2.continent AND c1.Population < c2.Population) 
WHERE c2.continent IS NULL; 

Объяснение: сделать объединение ищет страну c2, которая имеет тот же континент и большее население. Если вы не можете найти один (что указано внешним соединением, возвращающим NULL для всех столбцов c2), то c1 должна быть страной с самой высокой совокупностью на этом континенте.

Обратите внимание, что это может содержать более одной страны на континент, если есть связь для позиции №1. Другими словами, могут быть две страны, для которых нет третьей страны с большим населением.

 Смежные вопросы

  • Нет связанных вопросов^_^