另一个SQL教程问题:字段> 0?

时间:2009-01-12 03:40:12

标签: mysql sql select

好吧,this one(3a;提供答案的样本问题)让我摸不着头脑:

  

bbc(姓名,地区,地区,人口,国内生产总值)
   3A。找到每个地区最大的国家:

SELECT region, name, population
  FROM bbc x
 WHERE population >= ALL
    (SELECT population
       FROM bbc y
      WHERE y.region = x.region
        AND population > 0)

当我考虑数据库引擎循环表条目并将每个x.region与当前y.region(在嵌套SELECT中)匹配时,我理解'WHERE y.region = x.region'的概念。 ..但wtf确实'AND population > 0'吗?没有它,这不是一个正确的答案,但我不知道怎么没有......

2 个答案:

答案 0 :(得分:2)

我在这里推测它。

如果特定区域的所有记录的总体为空,该怎么办?

编辑:它可以被视为一种安全网,可以忽略人口中的-ve值(不是现实生活场景)。

答案 1 :(得分:2)

那个子句只是因为在欧洲表(对于梵蒂冈)中有一个条目,在填充列中有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 documentation for ALL subqueries中,有一条有用的评论(强调他们的评论):

  

通常,包含 NULL 值和空表表是“边缘情况”。在编写子查询代码时,请始终考虑是否考虑了这两种可能性。