sql - 什么是SELF JOIN以及何时使用它?

可能重复:
sql:self-joins解释

什么是自我加入,你什么时候使用它? 我不理解自我联合,所以一个例子的外行解释会很棒。

Imran asked 2019-08-12T07:58:01Z
5个解决方案
149 votes

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

例如,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
RedFilter answered 2019-08-12T07:58:27Z
51 votes

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

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

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

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

等等...

paxdiablo answered 2019-08-12T07:59:22Z
19 votes

自联接就是您自己加入表格时的情况。 没有SELF JOIN关键字,您只需编写一个普通连接,其中连接中涉及的两个表都是同一个表。 需要注意的一点是,当您自行加入时,必须为表使用别名,否则表名称将不明确。

当您想要关联同一个表中的行对(例如父子关系)时,它非常有用。 以下查询返回类别' Kitchen'的所有直接子类别的名称。

SELECT T2.name
FROM category T1
JOIN category T2
ON T2.parent = T1.id
WHERE T1.name = 'Kitchen'
Mark Byers answered 2019-08-12T07:59:55Z
11 votes

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

例:

Select *
FROM Table t1, Table t2
WHERE t1.Id = t2.ID
Michael Pakhantsov answered 2019-08-12T08:00:22Z
6 votes

您可以在表格中使用自我加入,并且#34;引用" 对自己 - 例如 员工表,其中managerid是同一个表上employeeid的外键。

例:

SELECT E.name, ME.name AS manager
FROM dbo.Employees E
LEFT JOIN dbo.Employees ME
ON ME.employeeid = E.managerid
Will A answered 2019-08-12T08:00:51Z
translate from https://stackoverflow.com:/questions/3362038/what-is-self-join-and-when-would-you-use-it