SQL: избыточный столбец, в котором указано условие WHERE> 0? - PullRequest
5 голосов
/ 22 сентября 2010

Помогите мне понять это: в учебном пособии sqlzoo по вопросу 3а («Найти самую большую страну в каждом регионе»), почему присоединение «И население> 0» к вложенному выражению SELECT делает это правильным

Ответы [ 2 ]

2 голосов
/ 22 сентября 2010

Причина в том, что:

AND population > 0

... отфильтровывает пустую строку для региона "Европа" с именем "Ватикан", что усложняет:

WHERE population >= ALL (SELECT population 
                           FROM ...)

... потому что NULL не является значением, поэтому Россия не будет правильно ранжироваться.Оператор ALL требует, чтобы значение, которое вы сравнивали, было больше или равно ALL значениям, возвращаемым из подзапроса, что никогда не может произойти, если там есть значение NULL.либо:

SELECT region, name, population 
  FROM bbc x
 WHERE population = (SELECT MAX(population)
                       FROM bbc y
                      WHERE y.region = x.region)

..., либо с помощью JOIN:

SELECT x.region, x.name, x.population 
  FROM bbc x 
  JOIN (SELECT y.region, 
               MAX(y.population) AS max_pop
          FROM bbc y 
      GROUP BY y.region) z ON z.region = x.region 
                          AND z.max_pop = x.population
0 голосов
/ 22 сентября 2010

Нет, это не так. Крупнейшая страна имеет априори ненулевое население.

Это все равно что проверять, есть ли в самой большой книге страницы.

...