Другой вопрос учебника по SQL: Field > 0?
Вопрос
Хорошо, этот (3a; пример проблемы с предоставленным ответом) заставил меня почесать голову
Би-би-си (имя, регион, район, население, ВВП)
3a. Найдите самую большую страну в каждом регионе:
SELECT region, name, population
FROM bbc x
WHERE population >= ALL
(SELECT population
FROM bbc y
WHERE y.region = x.region
AND population > 0)
Я понимаю концепцию ' WHERE y.region = x.region
', когда я думаю об этом с точки зрения механизма обработки базы данных, проходящего по элементам таблицы и сопоставляющего каждый x.region с текущим y.region (во вложенном SELECT) ... но wtf делает ' AND население > 0
'делать? Это неправильный ответ без него, но я не понимаю, как нет ...
Решение
Это предложение существует только потому, что в таблице Европы (для Ватикана) есть запись, в столбце которой содержится NULL. Следующие работы также, и я считаю, что это более понятно:
SELECT region, name, population
FROM bbc x
WHERE population >= ALL
(SELECT population
FROM bbc y
WHERE y.region = x.region
AND population IS NOT NULL)
В документации MySQL для ВСЕХ подзапросов есть полезный комментарий (выделите их):
Как правило, таблицы, содержащие NULL значения и пустые таблицы , являются "крайними случаями". " При написании кода подзапроса всегда учитывайте, учли ли вы эти две возможности.
Другие советы
Я спекулирую здесь.
Что если численность населения равна нулю для всех записей определенного региона?
РЕДАКТИРОВАТЬ. Можно считать своего рода сетью безопасности игнорирование -ve значений в популяции (не сценарий реальной жизни).