什么是 SELF JOIN? 你什么时候会使用它?

什么是自我连接,什么时候使用它?我不明白自我连接,所以一个外行的解释与例子将是伟大的。

492851 次浏览

当表本身引用数据时,可以使用自联接。

例如,一个 Employee表可能有一个指向当前雇员的老板的雇员的 SupervisorID列。

要查询数据并获取同一行中两个人的信息,您可以这样自我连接:

select e1.EmployeeID,
e1.FirstName,
e1.LastName,
e1.SupervisorID,
e2.FirstName as SupervisorFirstName,
e2.LastName as SupervisorLastName
from Employee e1
left outer join Employee e2 on e1.SupervisorID = e2.EmployeeID

自我连接就是将表与其自身连接起来。没有 SELF JOIN关键字,您只需编写一个普通的联接,其中联接中涉及的两个表都是同一个表。需要注意的一点是,当您自我连接时,有必要为表使用别名,否则表名将是不明确的。

当您希望将来自同一个表的行对关联起来时,它非常有用,例如父子关系。下面的查询返回类别“ Kitchen”的所有直接子类别的名称。

SELECT T2.name
FROM category T1
JOIN category T2
ON T2.parent = T1.id
WHERE T1.name = 'Kitchen'

您可以在一个“引用”自身的表上使用一个 self-join ——例如,在一个员工表中,manager 是同一个表中 Employeeid 的外键。

例如:

SELECT E.name, ME.name AS manager
FROM dbo.Employees E
LEFT JOIN dbo.Employees ME
ON ME.employeeid = E.managerid

SQL 自连接只是一个普通的连接,用于将表连接到自身。

例如:

Select *
FROM Table t1, Table t2
WHERE t1.Id = t2.ID

一个典型的例子是,你想要一份员工及其直接经理的名单:

select e.employee as employee, b.employee as boss
from emptable e, emptable b
where e.manager_id = b.empolyee_id
order by 1

它主要用于存储在同一个表中的行之间存在任何关系的地方。

  • 雇员。
  • 多层次传销
  • 机械零件。

诸如此类。