两次使用同一张表进行SQL Join?

4

我有这张表:

 CREATE TABLE EMP
    (EMPNO NUMBER(4) CONSTRAINT EMP_PRIMARY_KEY PRIMARY KEY ,
    ENAME varchar2(10),
    JOB varchar2(9),
    MGR NUMBER(4)CONSTRAINT EMP_SELF_KEY REFERENCES EMP (EMPNO),
    HIREDATE DATE,
    CONSTRAINT EMP_FOREIGN_KEY REFERENCES DEPT (DEPTNO));

现在我想获取所有工人的名字(ename)、工作(job)和经理的名字(mgr)。

我考虑使用表自连接来实现:

SELECT ename, job, empno
FROM emp
INNER JOIN emp AS emp1
ON (emp.mgr = emp1.empno);

但我总是收到错误信息:“缺少关键字”
3个回答

3

我认为您需要从inner join语句中删除AS

SELECT emp.ename, emp.job, emp.empno
FROM emp
INNER JOIN emp  emp1
ON (emp.mgr = emp1.empno);

在每个列名之前添加别名。


哇 :) 感谢您的快速回复,但它仍然不起作用。现在我收到另一个错误:“未定义唯一列”。 - Bajellor
@Bajellor 然后将 FROM emp 更改为 FROM emp emp - Jens
是的,这就是问题所在。谢谢 :) - Bajellor
1
@Bajellor:那就是问题所在了?表的名称是emp,但你被迫使用别名emp???Jens的查询在我知道的任何Oracle版本中都可以运行。你使用的是哪个版本? - Thorsten Kettner
@ThorstenKettner,我的意思不是这样的,他使用别名的想法给了我提示,现在它可以工作了。我已经将我的别名称为emp1和emp2:D - Bajellor

1
SELECT E2.ename, E2.job, E2.empno, E1.ename as 'manager_name'
FROM emp as E1
INNER JOIN emp AS E2
ON E1.mgr = E2.empno;

1

试试这个:

SELECT e.ename, e.job, e.empno
FROM emp e
INNER JOIN emp e1
   ON (e.mgr = e1.empno);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接