1

私の質問は簡単です.2つのテーブル間で結合していて、そのうちの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 つのテーブルにまたがっていますが、サンプル スニペットは実際の問題を単純化します。

よろしく、

4

2 に答える 2

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 の結合レコードのみを選択することにより、外部結合を内部結合に戻していました。これにより、null であるすべての一致しない行が除外されます。

于 2012-07-16T09:33:50.887 に答える
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 
于 2012-07-16T09:30:34.320 に答える