【发布时间】:2015-03-24 19:18:46
【问题描述】:
有什么方法可以将同一张桌子加入一张桌子?
【问题讨论】:
-
是的,但如果您需要更多帮助,您应该提供一个示例(数据和预期输出)
-
为什么需要加入已经选择的表? (有点好奇)
标签: sql sql-server
有什么方法可以将同一张桌子加入一张桌子?
【问题讨论】:
标签: sql sql-server
自联接是表与自身联接的联接(即 也称为一元关系),特别是当表具有 FOREIGN KEY 引用它自己的 PRIMARY KEY。加入表格 本身意味着表格的每一行都与自身相结合,并且 与表格的每一行。
自连接可以看作是同一张表的两个副本的连接。 该表实际上并未被复制,但 SQL 将命令执行为 虽然是。
一个典型的例子:
SELECT a.ID, b.NAME, a.SALARY
FROM CUSTOMERS a, CUSTOMERS b
WHERE a.SALARY < b.SALARY;
【讨论】:
JOIN 子句。
您可以使用自联接。
解释自联接的示例。假设您有一个表,其中包含如下员工和主管的详细信息:
EmployeeName SupervisorName
ABC XYZ
DEF YZX
PQR XYZ
HJK PQR
现在,如果我想找出所有员工的主管与员工 ABC 相同。
所以可能的方法:
方法 1
SELECT employeename
FROM employee
WHERE SupervisorName = "ABC"
因此,为此我们需要有我们想要获取详细信息的主管的姓名(一个荒谬的)
方法2:
SELECT employeename
FROM employee
WHERE SupervisorName in
( SELECT SupervisorName
FROM employee
WHERE employee_name = "ABC")
这个不如使用 Self Join 高效
方法 3:- 使用 Self Join
SELECT e1.employeename
FROM employee e1 self join employee e2
on e1.SupervisorName = e2.SupervisorName
AND e2.employeename="ABC";
【讨论】:
是的,如果您为表设置别名
... from my_table join my_table as 'othertable' ON ...
【讨论】:
以下链接描述了 sql server 中的自连接: https://technet.microsoft.com/en-us/library/ms177490%28v=sql.105%29.aspx
【讨论】: