【问题标题】:Can I join a table with itself in SQL Server?我可以在 SQL Server 中加入一个表吗?
【发布时间】:2015-03-24 19:18:46
【问题描述】:

有什么方法可以将同一张桌子加入一张桌子?

【问题讨论】:

  • 是的,但如果您需要更多帮助,您应该提供一个示例(数据和预期输出)
  • 为什么需要加入已经选择的表? (有点好奇)
  • Explanation of self-joins的可能重复

标签: sql sql-server


【解决方案1】:

这被称为Self Join

引用w3resource.com

自联接是表与自身联接的联接(即 也称为一元关系),特别是当表具有 FOREIGN KEY 引用它自己的 PRIMARY KEY。加入表格 本身意味着表格的每一行都与自身相结合,并且 与表格的每一行。

自连接可以看作是同一张表的两个副本的连接。 该表实际上并未被复制,但 SQL 将命令执行为 虽然是。

一个典型的例子:

SELECT  a.ID, b.NAME, a.SALARY 
FROM CUSTOMERS a, CUSTOMERS b
WHERE a.SALARY < b.SALARY;

【讨论】:

  • 逗号连接是不是有点过时了?我总是使用标准的JOIN 子句。
【解决方案2】:

您可以使用自联接。

解释自联接的示例。假设您有一个表,其中包含如下员工和主管的详细信息:

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";

【讨论】:

    【解决方案3】:

    是的,如果您为表设置别名

    ... from my_table join my_table as 'othertable' ON ...

    【讨论】:

      【解决方案4】:

      以下链接描述了 sql server 中的自连接: https://technet.microsoft.com/en-us/library/ms177490%28v=sql.105%29.aspx

      【讨论】:

        猜你喜欢
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-30
        • 1970-01-01
        • 1970-01-01
        • 2010-09-25
        • 1970-01-01
        相关资源
        最近更新 更多