2012-01-05 16 views
-2

の場合私は2つのテーブルに3つのテーブルを用意しています。ケースまたはSYBASE ASEの条件が

問題はすべて内部結合ですが、時間1の条件がNULLになる可能性があります。 したがって、NULLと2番目の値を1つ入れたいと思います。 PLSは、クエリ

`

select 
cr.id 
, cm.orgaparty_uri 
, cm.role_uri 
, am.orgaparty_uri 
, am.role_uri 
, gu.name_t 
, gu1.name_t 
from 
cdm_clientrelation cr 
,cdm_commercial_roles cm 
,cdm_commercial_roles am 
,gcl_user gu 
,gcl_user gu1 
where 
cm.agreement_uri ='cdm:clientRelation/'+cr.id 
and cm.role_uri ='gcl:role/CommercialManager' 
and cm.orgaparty_uri= 'gcl:user/'+gu.id 
AND am.agreement_uri='cdm:clientRelation/'+cr.id 
AND am.role_uri='gcl:role/AdministrativeManager' 
AND am.orgaparty_uri = 'gcl:user/'+gu1.id` 

いくつかの時間が行のいずれかが、商用または管理者ロールのためcdm_commercial_rolesテーブルに存在しないことをできる可能性があります参照してください。それは文句を言わないことと、内側は に失敗参加しますが、行がない場合、私はあなたが行がときISN」示すことにしたい場合は、それは私のSELECTステートメントとしてNULLとしてウル返事を

+0

古いスタイルの結合構文は使用しないでください。より現代的な内側と外側の結合構文を使用することをお勧めします。私はASEがこれをサポートしていると仮定します。 –

答えて

0

を待っ 名前 を与える必要がありますあなたの問題を解決するためにLEFT OUTER JOINすることができますすべてのテーブル間の対応t。


の結果左外部結合(または単に参加左)表Aおよび Bは常に、 結合条件がない場合でも、「左」テーブル(A)のすべてのレコードが含まれてい「右」テーブル (B)に一致するレコードが見つかりません。つまり、ON句がBの0(ゼロ)レコードと一致する場合、 の結合は結果内の行を返しますが、Bの各 列にNULLを返します。つまり、左外部結合によってすべての 値が返されます左のテーブルから、右のテーブル (または一致する結合述語がない場合はNULL)からの一致した値。右側のテーブル が1つの行を返し、左側のテーブルが複数の一致する行 を返した場合は、左側のテーブルの 個の行ごとに、右側のテーブルの値が繰り返されます。 Oracle 9i以降ではLEFT OUTER JOIN文を(+)と同様に使用できます。