SQL:Redundant WHERE子句指定列是> 0?

时间:2010-09-21 21:44:59

标签: sql database where-clause

帮助我理解这一点:在问题3a的sqlzoo教程(“查找每个地区中最大的国家/地区”)中,为什么要附加'AND population>嵌套的SELECT语句的0'是否正确?

2 个答案:

答案 0 :(得分:2)

原因是因为:

AND population > 0

...正在过滤掉“Europe”区域的空行,名称为“Vatican”,这会使以下内容变得复杂:

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

答案 1 :(得分:0)

不,不。最大的国家拥有先验非零人口。

就像检查最大的书中是否有任何页面一样。