2012-07-16 55 views
1

我的問題很簡單,假如我是兩個表,其中一人之間的連接是右連接右連接非可連接列

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

過濾左/右連接表在現代連接語法的on子句中完成。而且我總是使用左連接,因爲左右連接混合的複雜查詢是不可管理的。 – 2012-07-16 09:34:07

回答

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的連接記錄將外部連接重新轉換爲內部連接,該連接記錄排除了空白處的所有無匹配行。

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