2

好吧,这个(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当我考虑到 db 引擎循环遍历表条目并将每个 x.region 与当前 y.region (在嵌套 SELECT 中)匹配时,我理解 ' ' 的概念......但是 wtf 确实 ' AND population > 0' 做? 没有它,这不是一个正确的答案,但我不明白怎么不...

4

2 回答 2

2

我在这里推测。

如果某个特定区域的所有记录的人口都为空怎么办?

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

于 2009-01-12T03:48:43.603 回答
2

该子句之所以存在,是因为 Europe 表(针对梵蒂冈)中有一个条目,其在 population 列中为 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)

ALL subqueries 的 MySQL 文档中,有一个有用的评论(强调他们的):

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

于 2009-01-12T03:50:01.417 回答