如果没有"mgr"表,如何在Oracle中查询直接上级的姓名?
时间: 2024-10-11 07:09:15 浏览: 24
如果没有"mgr"表来存储直接上级的信息,通常你需要依赖于"emp"表自身的数据来间接推断上下级关系。这可以通过递归查询(也称为自连接查询或者层级查询)来完成,但前提是你能确定每个员工只有一个直接上级。
例如,你可以使用SQL的递归公用表达式(Recursive Common Table Expression, CTE)来模拟查找过程,但Oracle并不是直接支持这种语法的。在这种情况下,你可能需要借助其他工具或者临时处理来实现类似的功能。如果你的数据库支持CTE或者有专门的递归查询函数(比如PL/SQL),你可以尝试这样做:
```sql
WITH RECURSIVE emp_hierarchy (empno, level, path) AS (
SELECT empno, 1, '1' || empno FROM emp WHERE manager_id IS NOT NULL
UNION ALL
SELECT e.empno, h.level + 1, h.path || ',' || e.empno
FROM emp e
JOIN emp_hierarchy h ON e.manager_id = h.empno
)
SELECT DISTINCT path || ' (Level ' || level || ')' AS manager_path
FROM emp_hierarchy
WHERE salary BETWEEN 2000 AND 3000;
```
这里的路径(path)字段表示了从根节点(即经理)到当前员工的路径。请注意,这种方法依赖于数据库是否支持递归查询,并且可能会因性能原因在大型数据集上效率不高。
阅读全文