我遇到了一个似乎没有做我想要的正确加入的问题。 下面的查询不会从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)
不确定我在哪里出错了。哦,我应该提一下,我尝试在测试数据库中创建一个类似的表结构,一切都按预期工作。这让我觉得有一个数据库设置正在改变查询返回结果的方式。
答案 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 join
到right join
。