sql - SQL:如何理解需要加入 3 个表的 2 个列的原因
问题描述
有人告诉我,加入这 3 个表的正确方法是加入 2 列,如下所示:
SELECT c.code, name, region, e.year, fertility_rate, unemployment_rate
FROM countries AS c
INNER JOIN populations AS p
ON c.code = p.country_code
INNER JOIN economies AS e
ON p.country_code = e.code AND p.year = e.year
我的问题与我这样做时发生的错误有关,而第二个内部连接上没有“AND p.year = e.year”:
SELECT c.code, name, region, e.year, fertility_rate, unemployment_rate
FROM countries AS c
INNER JOIN populations AS p
ON c.code = p.country_code
INNER JOIN economies AS e
ON p.country_code = e.code
结果是:
代码 | 国家 | 地区 | 年 | 出生率 | 失业率 |
---|---|---|---|---|---|
AFG | 阿富汗 | 南亚和中亚 | 2015 | 5.746 | 无效的 |
AFG | 阿富汗 | 南亚和中亚 | 2010 | 5.746 | 无效的 |
AFG | 阿富汗 | 南亚和中亚 | 2015 | 4.653 | 无效的 |
AFG | 阿富汗 | 南亚和中亚 | 2010 | 4.653 | 无效的 |
我的问题是:为什么我会重复 2010 年和 2015 年的两个不同的生育率值?该教程说“在 c.code = e.code 上进行最后一次连接并且不包括年份的问题在于,例如 2010 年的生育率值也与 2015 年的失业率值配对。”
我不明白解释,因此我从概念上不明白这里出了什么问题......
有人可以引导我完成 SQL 正在采取的步骤吗?
解决方案
推荐阅读
- python-3.x - 如何将 jira.search_issues 的结果存储在 DataFrame 中
- sql - SQLdeveloper 自动添加 FORCE EDITIONABLE
- typescript - 通过库共享时未注册 NestJS 自定义 PassportStrategy
- delphi - 如何滚动带有 TListbox 的 TVertscrollBox
- python - 在换行符处从 `TextIOBase.tell()` 出现不可能的大偏移
- java - 如何在更新关系中删除和重新插入 Kotlin + Hibernate
- google-bigquery - 如何避免 [缺少关闭双引号 (") 字符。] google bigquery 中的错误
- elasticsearch - 等效于 IN 子句和 OR 组合的弹性搜索查询
- keycloak - Keycloak:在生成的令牌中包含请求范围的角色
- swift - 如何将多个 SCNScene 添加到一个 SCNScene?