mysql - 自连接中的内连接 - MySql

标签 mysql self-join

Stack Overflow 上提出了以下问题:

“我需要在此表上使用自连接。

+------------+------+--------+
| Country    | Rank |  Year  |
+------------+------+--------+
|France      |  55  |  2000  |
+------------+------+--------+
|Canada      |  30  |  2000  |
+------------+------+--------+ 
|Liberia     |  59  |  2001  |
+------------+------+--------+ 
|Turkey      |  78  |  2000  |
+------------+------+--------+ 
|Japan       |  65  |  2003  |
+------------+------+--------+
|Romania     |  107 |  2001  |
+------------+------+--------+

我需要使用自连接来获取与土耳其同一年份的国家。仅显示国家/地区和年份。”

在选择的正确答案中,推荐的查询之一是:

SELECT DISTINCT a.Country, a.Year 
FROM table1 AS a 
INNER JOIN table1 AS b 
   on a.Year=b.Year 
  and b.Country='Turkey';

我没有收到此查询。难道 a.Year=b.Year 总是正确的 - 因为两个表都是相同的吗?那么使用它有什么必要呢? 上面的查询不是只会返回该国的“土耳其”吗?

如果我错了,请帮助我理解。

非常感谢!

最佳答案

Isn't it that a.Year=b.Year always going to be true?

没有。将此视为首先采用 A 和 B 的笛卡尔积(将 a 的所有行与 b 的所有行匹配),然后选择 a 的年份和 B 的年份相同的那些行。这产生了两个国家同一年份的数据。

利用这些数据,我们可以进一步确定与土耳其配对的国家。

这就是此查询正在执行的操作。

关于mysql - 自连接中的内连接 - MySql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52941508/

相关文章:

sql-server - sql server - 将单个 id 组合到范围中

r - 使用自连接按组进行的第一次观察

php - 计算帖子的平均评分

mysql - 如何使用 JetBrains DataGrip 编辑用户权限?

php - 如果未指定 mysql 链接,mysql 函数是否会打开一个新的 mysql 连接?

sql - 将自联接重写为 JPQL

Mysql内部连接和空精度舍入

php - 使用 wpdb 搜索用户元值

MYSQL SQL(自)加入?

mysql - 我需要一个循环还是他们在这里更简单