单行子查询问题

时间:2014-11-04 22:03:05

标签: sql oracle11g

我使用以下查询:

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编号。使用此查询会返回多行,因此请寻求帮助。

谢谢

1 个答案:

答案 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是唯一的。