我的问题很简单,假设我正在两个表之间加入,其中一个是正确的联接
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个表,但样本片段将简化实际问题
的问候,
答案 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