SQL Self/Inner 从同一个 table 加入

SQL Self/Inner Join from same table

我正在努力为此 table(办公室)应用一个简单的 JOIN 命令:

+-----------+-------+------+
| Employee  | Name  | Boss |
+-----------+-------+------+
|         1 | Joe   |    2 |
|         2 | Chris |    3 |
|         3 | Rob   |    2 |
|         4 | Dean  |    1 |
+-----------+-------+------+

我见过很多使用 2 table 的例子,我试图重现这些例子,这让我想到了:

SELECT office.Name
FROM office
INNER JOIN office
    ON office.Employee = office.Boss; 

我正在尝试将员工推荐给老板

但是这段代码给我:不唯一 table/alias:'office' 有什么简单的解决办法?也许根本不使用 JOIN..

您需要使用 table 别名,因为您在查询中有多个 table 同名。例如:

SELECT a.Name, b.Name
FROM office a
INNER JOIN office b
    ON a.Employee = b.Boss; 

在这种情况下,查询包括 table office 的两个“实例”。为确保您使用属于正确 table 的正确列,您需要为每个实例使用 table 别名;在这种情况下 ab.

您需要使用 AS 关键字(在 FROM 子句中)为每个 table 赋予自己不同的别名:

SELECT
    employee.Name AS ThisPerson,
    boss.Name     AS HasThisBoss
FROM
    office AS employee
    INNER JOIN office AS boss ON
        boss.Employee = employee.Boss;

仅供参考:SQL 中的 AS 关键字已过载,并且根据上下文具有非常不同的用途:

  • 列别名:SELECT foo.X AS bar FROM qux
  • Table别名:SELECT foo.X FROM qux AS foo
  • 计算列:ALTER TABLE foo ADD bar AS ( X + Y )
  • CAST 中的类型说明符:SELECT CAST( x AS int ) AS x2