sql - 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+1和population-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 平台运行我的查询。
解决方案
你的版本更好。替代版本只是从总体中加 1 或减 1。为什么?因为between
包含端点和问题显然不要端点。
因此,与试图哄骗去做不应该做的事情相比, >
and<
是一个更好的选择。between
推荐阅读
- python - blockly 如何在本地构建 blockpy?
- list - 使用约束遍历 0、1 的列表
- pyspark - 将一个数据帧的 avro 模式复制到另一个 pyspark
- javascript - 如何用分页做点击项目?
- netbeans - Netbeans,如何删除 Gradle 项目
- html - 防止手机大屏背景图片溢出
- sql - FromSqlRaw 注入 EF Core 3.0
- html - 左侧带有徽标的 CSS 标题,最右侧带有多个段落
- python - 使用自定义 mape 损失时的 keras nan 损失
- python - Keras:无法为具有形状的数组分配 3.75 GiB