回答
当表引用数据本身时使用自连接。
例如,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'
很高兴看到此评论。 ON T2.parent = T1。id(因为它会影响结果,如果我们在其中交换'parent'和'id') – himanshupareek66 2017-02-19 16:25:24
不用说'SELF JOIN'关键字。我对这部分感到困惑! – nclsvh 2018-02-12 15:03:50
你会在一个“引用”自己的表上使用自联接 - 例如,一个员工表,其中managerid是同一张表上employeeid的外键。
实施例:
SELECT E.name, ME.name AS manager
FROM dbo.Employees E
LEFT JOIN dbo.Employees ME
ON ME.employeeid = E.managerid
ON ME.employeeid = E.managerid将创建不同的结果而不是ON ME.managerid = E.employeeid – himanshupareek66 2017-02-19 16:24:06
SQL简单地自联接是正常连接,其用于连接一个表到其自身。
例子:
Select *
FROM Table t1, Table t2
WHERE t1.Id = t2.ID
为避免结果中出现重复的列名,使用'SELECT t1。*'会不会更安全? – Matthieu 2013-09-28 14:08:12
那么,一个典型的例子是,你希望得到员工的名单和他们的直接经理:
select e.employee as employee, b.employee as boss
from emptable e, emptable b
where e.manager_id = b.empolyee_id
order by 1
它基本上是用在有行之间的任何关系存储在同一张表中。
- 雇员。
- 多层次营销。
- 机器零件。
等等......
- 1. intn_t什么时候使用它,什么时候不使用
- 2. EGL_KHR_IMAGE < - 它是什么,什么时候应该使用它
- 3. 什么时候应该使用INNER-LOOP-JOIN而不是INNER JOIN
- 4. 什么时候我们不应该使用[weak self]和[unowned self]?
- 5. 什么是SAPI,您什么时候使用它?
- 6. 什么是HTML BB按钮?什么时候应该使用它?
- 7. 什么是Ninject,你什么时候使用它?
- 8. 什么是模拟,什么时候应该使用它?
- 9. 什么是BigInteger,我们什么时候可以使用它?
- 10. 什么是MvcHtmlString,我应该什么时候使用它?
- 11. 什么是单身模式?为什么和什么时候应该使用它?
- 12. addEvents的要点/效用是什么?它什么时候有用?
- 13. MSBuild:它是什么,我什么时候需要它?
- 14. 什么时候使用__proto__和什么时候使用原型
- 15. 什么时候应该使用AWS,什么时候不使用
- 16. 什么时候使用Ruby和什么时候使用PHP
- 17. 什么时候使用ByteString,什么时候不使用?
- 18. Symfony sfFormFilters - 你什么时候使用它?
- 19. 什么是JavaScript对象,它们什么时候有用?
- 20. 什么时候使用@JsonProperty属性,它用于什么?
- 21. CourseCompletions是什么?它们是什么时候创建的?
- 22. 什么是'unsigned'意思是什么时候它本身?
- 23. 什么时候应该使用async/await,什么时候不用?
- 24. 你什么时候INNER JOIN LEFT JOINed表/
- 25. 什么是objc_sync_exit(self)
- 26. 什么时候是K 1024,什么时候是1000?
- 27. python sys.intern做什么,它应该在什么时候使用?
- 28. SqlCommand.Prepare()做什么以及它应该在什么时候使用?
- 29. 什么是“对象数据库”,什么时候使用它是有益的?
- 30. SQL Server CASE什么时候不使用CASE什么时候
这看起来像一个自外连接给我吗? – 2016-12-09 02:47:30
@JoeCaruso这是因为它;) – RedFilter 2016-12-09 18:26:49
我想知道为什么没有人强调“在同一行”部分。这不是完成自我加入的全部要点吗? – 2017-01-02 10:36:10