什么是SELF JOIN,什么时候使用它?

可能重复:
sql:自解释

什么是自我join,什么时候使用它? 我不明白自己的join,所以有一个例子的外行解释会很好。

当表引用数据本身时,您使用自连接。

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

要查询数据并获得一行中的两个人的信息,可以自己join,如下所示:

 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 

那么,一个典型的例子就是你想要得到一个员工名单和他们的直接经理名单:

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

它基本上用在存储在同一个表中的行之间有任何关系的地方。

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

等等…

SQL自联接只是一个常用的联接,用于将表联接到自己。

例:

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

自join只是当你join一个表与自己。 没有SELF JOIN关键字,只需编写一个普通连接,其中参与连接的两个表都是同一个表。 有一件事要注意的是,当你自我join时,有必要使用表的别名,否则表名将是不明确的。

如果要关联同一个表中的行对(例如,父子关系),这非常有用。 以下查询返回类别“Kitchen”的所有直接子类别的名称。

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

你可以在一个“引用”自己的表上使用一个自连接,例如一个员工表,其中managerid是同一个表上的employeeid的外键。

例:

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