右连接不可连接的列

时间:2012-07-16 09:26:39

标签: sql database oracle

我的问题很简单,假设我正在两个表之间加入,其中一个是正确的联接

select e.name, nvl(e.mobileNumber, c.secondaryNumber)
from T_employee e, t_contact c
where e.fieldOfficeCode = 10
and e.id = c.id (+)
and c.status = 1001

现在,如果我删除查询的最后一行,它将正确连接,但是一旦最后一行出现,我将不会得到任何结果。关于如何解决这个问题的任何想法。现在手头的查询相对复杂,并且跨越5个表,但样本片段将简化实际问题

的问候,

2 个答案:

答案 0 :(得分:3)

这就是你需要的:

and c.status (+) = 1001

或者用现代语法:

select e.name, nvl(e.mobileNumber, c.secondaryNumber)
from T_employee e
left outer join t_contact c
  on e.id = c.id
  and c.status = 1001
where e.fieldOfficeCode = 10

您的查询是通过仅选择c.status = 1001的连接记录将外部联接转回内部联接 - 这将排除所有不匹配的行,即

答案 1 :(得分:0)

试试这个

select e.name, nvl(e.mobileNumber, c.secondaryNumber) 
from T_employee e right join  t_contact c 
on and e.id = c.id (+) and c.status = 1001 
where e.fieldOfficeCode = 10