什么是自我加入,你什么时候使用它?我不明白自我加入,所以一个例子的外行解释会很棒。
答案 0 :(得分:149)
当表引用数据时,您使用自联接。
例如,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
答案 1 :(得分:51)
嗯,一个典型的例子是你想要获得一份员工及其直属经理的名单:
select e.employee as employee, b.employee as boss
from emptable e, emptable b
where e.manager_id = b.empolyee_id
order by 1
它基本上用于存储在同一个表中的行之间存在任何关系的地方。
等等......
答案 2 :(得分:19)
自我加入就是您自己加入表格时。没有SELF JOIN
关键字,您只需编写一个普通连接,其中连接中涉及的两个表都是同一个表。需要注意的一点是,当您自行加入时,必须为表使用别名,否则表名称将不明确。
当您想要关联同一个表中的行对(例如父子关系)时,它非常有用。以下查询返回“Kitchen”类别的所有直接子类别的名称。
SELECT T2.name
FROM category T1
JOIN category T2
ON T2.parent = T1.id
WHERE T1.name = 'Kitchen'
答案 3 :(得分:11)
SQL自连接只是一个普通连接,用于将表连接到自身。
示例:
Select *
FROM Table t1, Table t2
WHERE t1.Id = t2.ID
答案 4 :(得分:6)
你在一个“引用”自己的桌子上使用自我联接 - 例如员工表,其中managerid是同一个表上employeeid的外键。
示例:
SELECT E.name, ME.name AS manager
FROM dbo.Employees E
LEFT JOIN dbo.Employees ME
ON ME.employeeid = E.managerid