我使用以下查询:
select P.job_ref, P.emp_num, P.name,
P.job_title , P.job_type,
P.dept_ref, P.dept, J.mgr_rept,
(select P.name as manager_name
from PEOPLE P, JOB J
where J.mgr_rept=P.job_ref)
from PEOPLE P, JOB J
where P.job_ref=J.job_ref
问题是经理和员工姓名位于名称下的同一个表中。 job_ref与作业表中的mgr_rept相关联。员工job_ref将等于作业表中可以提取作业信息的值。然而,经理名称位于人员表中。 mgr_rept值将是管理器job_ref编号。使用此查询会返回多行,因此请寻求帮助。
谢谢
答案 0 :(得分:1)
首先,您不应再使用旧的以逗号分隔的连接语法。 20多年前,它已在标准SQL中替换为显式连接。
您的子查询选择所有人。它无论如何都不会链接到主查询中的记录。也许你再次使用相同的表别名让自己感到困惑。应该是这样的:
select
P.job_ref, P.emp_num, P.name,
P.job_title , P.job_type,
P.dept_ref, P.dept, J.mgr_rept,
(
select mgr.name
from PEOPLE mgr
where mgr.job_ref = J.mgr_rept
) as manager_name
from PEOPLE P
join JOB J on P.job_ref = J.job_ref;
但是,我不是百分百肯定,因为我完全不了解你的桌面结构。这仅适用于表人员中job_ref是唯一的。