T-SQL右外连接似乎不起作用

时间:2017-03-14 01:55:46

标签: sql-server outer-join

我遇到了一个似乎没有做我想要的正确加入的问题。 下面的查询不会从grp表中恢复所有记录。我希望有几行匹配30555 gl记录和grp表中的30行,gl列为空。相反,我得到30555 gl记录的预期几行,只有3个匹配的grp行而不是30行。

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)

不确定我在哪里出错了。哦,我应该提一下,我尝试在测试数据库中创建一个类似的表结构,一切都按预期工作。这让我觉得有一个数据库设置正在改变查询返回结果的方式。

1 个答案:

答案 0 :(得分: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;

我更喜欢left joinright join