我正在从本教程中学习有关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。我不了解乔和杰克的组合。除了解决方案之外,有人可以详细说明这是如何工作的吗?我想了解此结果背后的逻辑。
纽约的每一行都t1
与两行匹配,t2
因为您所需要的只是城市是相同的。因此,您得到2 x 2的纽约总比赛(对)。如果您添加第三个纽约,那么您将获得9行。
要查看您期望的行为,请尝试添加and t1.employee_name = t2.employee.name
。即使仅对大多数人都可以,也不能仅通过位置来唯一地标识所有人,因此您的结果似乎几乎可以奏效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句