2017-03-14 5 views
0

右の結合に問題があります。 以下のクエリは、grpテーブルからすべてのレコードを戻すわけではありません。私は30555のグラムのレコードに一致するいくつかの行とgl列のNULLがgrpテーブルから30行を期待しています。代わりに、私の代わりに私がここに間違って行ってきたところ、本当にわからない30T-SQLの右外部結合が機能していないようです。

select gl.Tran_Number, gl.Amount, gl.Cost_Center, ' - ' as blank, grp.* 
from GL_DETAIL_MC gl 
    right outer join EM_COST_GROUP_LIST_MC grp on grp.Cost_Center_Code = gl.Cost_Center and grp.Company_Code = gl.Company_Code 
where 
    (gl.Company_Code = 'RCL' or grp.Company_Code = 'RCL') 
    and (gl.Tran_Number = '30555  ' or gl.Transaction_ID is null) 

の30555 GLレコードのみ3マッチングGRP行の予想数の行を取得します。ああ、私は、テストデータベースに同様のテーブル構造を作成しようとしたことを言及する必要があり、すべてが期待通りに機能します。これは、クエリが結果をどのように返すかを変更しているデータベース設定があることにつながります。

答えて

0

外部結合は正常です。問題はwhere節です。

私はあなたが意図し推測:

select gl.Tran_Number, gl.Amount, gl.Cost_Center, ' - ' as blank, grp.* 
from EM_COST_GROUP_LIST_MC grp LEFT JOIN 
    GL_DETAIL_MC gl 
    on grp.Cost_Center_Code = gl.Cost_Center and 
     grp.Company_Code = gl.Company_Code and 
     gl.Company_Code = 'RCL' and 
     gl.Tran_Number = '30555 
where grp.Company_Code = 'RCL' or gl.Company_Code is not null; 

私はずっとright joinleft joinを好みます。

関連する問題