SQL左连接到子选择

时间:2015-01-09 20:44:39

标签: sql oracle subquery left-join

我正在尝试对3个表进行查询。我正在寻找前两张桌子上的副本,我有那个部分正常工作:

select b.stn_cd, b.dept_cd, a.emp_nbr, b.name, a.vacn_bid_prd
from tableA a, tableB b
where a.emp_nbr = b.emp_nbr
and a.vacn_bid_prd = 34
group by a.emp_nbr, a.vacn_bid_prd, b.stn_cd, b.dept_cd, b.name
having count(*) > 1
order by b.stn_cd, b.dept_cd, b.name;

接下来,我想从第三个表中添加一个列。由于我不想将它包含在'group by'中,我认为我应该进行左连接,例如:

select b.stn_cd, b.dept_cd, a.emp_nbr, b.name, a.vacn_bid_prd
from tableA a, tableB b
LEFT JOIN
    (
        select emp_nbr, default_work_area
        from tableC c
    ) as c
on a.emp_nbr = c.emp_nbr
where a.emp_nbr = b.emp_nbr
and a.vacn_bid_prd = 34
group by a.emp_nbr, a.vacn_bid_prd, b.stn_cd, b.dept_cd, b.name
having count(*) > 1
order by b.stn_cd, b.dept_cd, b.name;

我收到此错误: 错误:ORA-00905:缺少关键字 SQLState:42000 ErrorCode:905 职位:176

我对sql很新,但是我遵循了我在这个网站上找到的一些例子,并且无法弄清楚为什么这不起作用,特别是这个SQL LEFT JOIN Subquery Alias。我在这里的第一篇文章,我认为我的格式正确,但如果没有道歉。感谢。

1 个答案:

答案 0 :(得分:1)

使用explicit join语法

您需要为此

使用子查询
select T.stn_cd, T.dept_cd, T.emp_nbr, T.name, T.vacn_bid_prd, c.default_work_area
from
(
   select b.stn_cd, b.dept_cd, a.emp_nbr, b.name, a.vacn_bid_prd
   from tableA a
   join tableB b
   on a.emp_nbr = b.emp_nbr
   and a.vacn_bid_prd = 34
   group by a.emp_nbr, a.vacn_bid_prd, b.stn_cd, b.dept_cd, b.name
   having count(*) > 1

) T
left join tableC c
on T.emp_nbr = c.emp_nbr