首页 > 解决方案 > SQL 过滤帮助:col_name+1 和 col_name-1 有什么作用?

问题描述

我遇到了这个问题: 哪个国家的人口比加拿大多但比波兰少?显示名称和人口。

我写的查询工作正常:

SELECT name, population FROM world
WHERE population > 
(SELECT population FROM world
WHERE name = 'Canada')
AND
population < 
(SELECT population FROM world
WHERE name = 'Poland')

但是,答案键显示出更优雅的东西:

SELECT name,population FROM world
WHERE population BETWEEN
(SELECT population+1 FROM world WHERE name='Canada')
AND
(SELECT population-1 FROM world WHERE name='Poland')

问题:population+1population-1实际上是做什么的?我检索了人口、人口+1 和人口-1,他们似乎所做的只是从结果列值中加一并减一。为什么这对于我要解决的问题是必要的?为什么我不能这样做:

SELECT name,population FROM world
WHERE population BETWEEN
(SELECT population FROM world WHERE name='Canada')
AND
(SELECT population FROM world WHERE name='Poland')

运行上面的查询会返回一个不正确的结果,尽管它(在我看来)等同于我的原始查询,它返回了正确的结果!

非常感谢任何帮助我解决这个问题!

注意:使用 sqlzoo.net 平台运行我的查询。

标签: sqlconditional-statements

解决方案


你的版本更好。替代版本只是从总体中加 1 或减 1。为什么?因为between包含端点和问题显然不要端点。

因此,与试图哄骗去做不应该做的事情相比, >and<是一个更好的选择。between


推荐阅读