MySql自联接意外结果内部联接

用户名

我正在从本教程中学习有关SQL连接的信息:http : //www.programmerinterview.com/index.php/database-sql/what-is-a-self-join/

他们使用的表是:

+---------------+-------------------+
| employee_name | employee_location |
+---------------+-------------------+
| Joe           | New York          |
| Sunil         | India             |
| Alex          | Russia            |
| Albert        | Canada            |
| Jack          | New York          |
+---------------+-------------------+

我决定通过省略某些部分来对查询进行试验:

select * from
employee t1, employee t2
where t1.employee_location = t2.employee_location

这个查询看起来非常简单。“匹配相同位置的人。我认为可以,结果将是这样的:

+---------------+-------------------++---------------+-------------------+
| employee_name | employee_location || employee_name | employee_location |
+---------------+-------------------++---------------+-------------------+
| Joe           | New York          || Joe           | New York          |
| Sunil         | India             || Sunil         | India             |
| Alex          | Russia            || Alex          | Russia            |
| Albert        | Canada            || Albert        | Canada            |
| Jack          | New York          || Jack          | New York          |
+---------------+-------------------++---------------+-------------------+

但是我得到的不是上面的:

+---------------+-------------------+---------------+-------------------+
| employee_name | employee_location | employee_name | employee_location |
+---------------+-------------------+---------------+-------------------+
| Joe           | New York          | Joe           | New York          |
| Jack          | New York          | Joe           | New York          |
| Sunil         | India             | Sunil         | India             |
| Alex          | Russia            | Alex          | Russia            |
| Albert        | Canada            | Albert        | Canada            |
| Joe           | New York          | Jack          | New York          |
| Jack          | New York          | Jack          | New York          |
+---------------+-------------------+---------------+-------------------+

它适用于Sunil,Alex和Albert。我不了解乔和杰克的组合。除了解决方案之外,有人可以详细说明这是如何工作的吗?我想了解此结果背后的逻辑。

shawnt00

纽约的每一行都t1与两行匹配,t2因为您所需要的只是城市是相同的。因此,您得到2 x 2的纽约总比赛(对)。如果您添加第三个纽约,那么您将获得9行。

要查看您期望的行为,请尝试添加and t1.employee_name = t2.employee.name即使仅对大多数人都可以,也不能仅通过位置来唯一地标识所有人,因此您的结果似乎几乎可以奏效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章