当前位置: 首页 > 面试题库 >

NOT IN vs IN不返回免费结果

丁安宜
2023-03-14
问题内容

嗨,我正在研究sql
zoo教程中的示例#7:SELECT中的SELECT。在以下问题中

“查找属于一个总人口少于2500万的大洲的每个国家。请显示名称,大洲和人口。”

通过使用NOT IN和类似这样的子查询,我得到了正确的答案:

SELECT name, continent, population FROM world 
WHERE continent NOT IN (
    SELECT continent FROM world
    WHERE population > 25000000)

另一方面,如果我使用“ IN”而不是“ NOT
IN”和“人口<25000000”,则我没有得到正确的答案,而且我也无法理解为什么,可能有一个简单的原因,我只是不这样做看到了,有人可以向我解释吗?


问题答案:

如果我没看错,这个问题会要求列出一个大陆上每个国家人口少于2500万的每个国家,对吗?

如果是,请查看您的子查询:

SELECT continent FROM world
WHERE population > 25000000

您正在拉动至少一个拥有超过2500万人口的国家/地区的大洲,因此将其排除在外是行之有效的原因。

示例:欧洲大陆有5个国家,其中四个很小,但是其中一个国家查理拥有5000万人口。

因此,您的子查询将返回Continent Alpha,因为国家Charlie符合人口>
25000000的约束。此子查询将查找您不需要的所有内容,这就是使用not in可以工作的原因。

另一方面:

SELECT continent FROM world
WHERE population > 25000000

如果ANY国家/地区低于2500万,则将显示您不想要的大陆,因为您希望每个国家/地区都在下方。

示例:来自四个小国家的欧洲大陆。这四个值都在25000000以下,因此无论Country Charlie是否拥有50000000,它们都会由您的子查询返回。

显然,这不是解决问题的最佳方法,但这就是第一个查询有效而第二个查询无效的原因。



 类似资料:
  • 我有一个简单的代码,可以从第14列开始将转置的范围复制到另一张表的最后一行 它按原样返回零结果。如果我将destrow从公式更改为simple 2(这是现在最后一个空行),则效果很好。为什么不返回目标工作表中的最后一行索引?

  • 我正在尝试处理新的AndroidLollipopMediaProjection API。 我发现(至少在我的股票三星Galaxy S4 jfltexx上),当我开始意图获取捕获屏幕的权限()时,除非我在前面的尝试中选中了“不要再次询问”,否则在中不会有结果... 和结果处理: 权限对话框显示得很好,但是我的活动被隐藏了,它永远不会转到。 知道出什么问题了吗?

  • 虽然运行与SQL查询相同的查询并获取结果,但在ifCurrent中未获取任何结果。 我是否传递了错误的参数? 这就是在学校里通过的

  • 我正在玩mongob,并将一些测试数据{name:"david"}输入到“用户”集合中。我通过键入mongoshell验证了数据在MongoDB中 结果: 在 node.js 脚本中,使用以下代码: 不返回任何结果 我没有发现任何错误,也没有错误。请告知

  • 问题内容: 我有一个使用名为Todo的模型的路由设置,如下所示: 但是,todos.length始终为0,因为它找不到任何结果。当我跑步时: 我确定我已连接到同一数据库。我可以在mongod控制台中看到连接。我的连接位于config / db.js文件中: 我的server.js中的连接如下: 在Mongo Shell中,我得到1个结果。我期望此结果将由find查询返回。有什么我想念的吗?我正在使

  • 我正在用Hibernate Search 4.5.1和Spring 4.0.5版本构建一个应用程序。我正在尝试索引以下类: 我正在构建一个junit测试用例,看起来如下所示: 我还注意到在luke lucene上,一些索引词的长度最多为6个字符,例如,一首歌的艺术家是“后代”,而索引中存储的词是“the”和“offspr”。第一个可以,但第二个不应该是“后代”。为什么要截断名字?