数据库
首页 > 数据库> > mysql – 了解自我加入

mysql – 了解自我加入

作者:互联网

我正在练习自我加入,这是我在编写查询时不理解的事情.

我有一张桌子’员工’

employee表包含三条记录.

+-----+---------------+------------+
| id  | employee      | manager_id |
+-----+---------------+------------+
| 1   | Ola           |   NULL     |
| 2   | Ahmed         |    1       |
| 3   | Tove          |    1       |
+----------+----------+------------+

最后一列manager_id指的是第一列id,他是Ahmed和Tove的Ola经理.

如果我写的查询像

SELECT emp.employee as NAME, manager.employee as MANAGER
FROM employee as emp, employee as manager
WHERE emp.id = manager.manager_id

结果使艾哈迈德和托夫经理.

SELECT emp.employee as NAME, manager.employee as MANAGER
FROM employee as emp, employee as manager
WHERE manager.id = emp.manager_id

使它正确,有人可以解释一下吗?

解决方法:

自联接就像一个内部联接,其中同一个表的两个或多个实例通过公共数据类型列/字段连接在一起.这种连接(内连接)根据连接条件给出公共行.

employee表包含三条记录.在这种情况下,

员工为emp:

+-----+---------------+------------+
| id  | employee      | manager_id |
+-----+---------------+------------+
| 1   | Ola           |   NULL     |
| 2   | Ahmed         |    1       |
| 3   | Tove          |    1       |
+----------+----------+------------+

员工担任经理:

+-----+---------------+------------+
| id  | employee      | manager_id |
+-----+---------------+------------+
| 1   | Ola           |   NULL     |
| 2   | Ahmed         |    1       |
| 3   | Tove          |    1       |
+----------+----------+------------+

现在第一个案例:让我们尝试这个来理解差异:

SELECT emp.*,经理.*
员工为emp,员工为经理
WHERE emp.id = manager.manager_id

+-----+---------------+------------+-----+---------------+------------+
| id  | employee      | manager_id | id  | employee      | manager_id |
+-----+---------------+------------+-----+---------------+------------+
| 1   | Ola           |   NULL     | 2   | Ahmed         |    1       |
| 1   | Ola           |   NULL     | 3   | Tove          |    1       |
+----------+----------+------------+----------+----------+------------+

请参阅emp.id = manager.manager_id.因此,作为NAME的emp.employee从第一个表&给出了Ola行.作为经理的manager.employee给了Ahmed&从第二张桌子的托夫.

现在第二个案例:让我们试试这个来理解它们的区别:

SELECT emp.*,经理.*
员工为emp,员工为经理
WHERE manager.id = emp.manager_id

+-----+---------------+------------+-----+---------------+------------+
| id  | employee      | manager_id | id  | employee      | manager_id |
+-----+---------------+------------+-----+---------------+------------+
| 2   | Ahmed         |    1       | 1   | Ola           |   NULL     |  
| 3   | Tove          |    1       | 1   | Ola           |   NULL     |
+----------+----------+------------+----------+----------+------------+

请参阅manager.id = emp.manager_id.因此,作为NAME的emp.employee给出了Ahmed&的行.第一桌和第二桌manager.employee作为MANAGER从第二个表中给出Ola行.

标签:self-join,sql,mysql
来源: https://codeday.me/bug/20190831/1772201.html