Другой вопрос учебника по SQL: Поле> 0? - PullRequest
2 голосов
/ 12 января 2009

Хорошо, этот (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 population > 0'? Без этого нет правильного ответа, но я не понимаю, как нет ...

Ответы [ 2 ]

2 голосов
/ 12 января 2009

Это предложение существует только потому, что в таблице Европы (для Ватикана) есть запись, в столбце населения которой указано значение 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 значения и пустые таблицы , являются "крайними случаями". При написании кода подзапроса всегда учитывайте, учли ли вы эти две возможности.

2 голосов
/ 12 января 2009

Я спекулирую здесь.

Что, если численность населения для всех записей определенного региона равна нулю?

РЕДАКТИРОВАТЬ: Это можно считать своего рода сетью безопасности, чтобы игнорировать все ценности в популяции (не сценарий реальной жизни).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...