MS SQL Server语言 - 包含多个连接的查询显示正确的条目数量,结合OR条件,我得到了很多重复项



所以我在它的末尾得到了这个查询,我寻找一个特定的值,可以是2或3或4或5或6,当我寻找任何这些值没有其他的,例如只有2我得到行的正确数量,但只要我把它们与"或"语句,我得到一个包含重复项的大列表。

select 
bkm.tblProject.sCode ,bkm.tblPart.sPart ,
bkm.tblPart.dReturnOrder , bkm.tblUser.sMail , bkm.tblPart.BuildStart  ,
bkm.tblPart.BuildEnd ,ret.tblInvoice.TargetDate ,ret.tblInvoice.dInvoice ,
ret.tblInvoice.PaymentDate ,ret.tblInvoice.dPayment ,ret.tblInvoice.sName ,
bkm.tblPart.nProjectId, ret.tblInvoice.nProjectId
from bkm.tblPart
left join bkm.tblUser on 
bkm.tblPart.nManagerId =bkm.tblUser.nUserId 

left join bkm.tblProject on  
bkm.tblPart.nProjectId=bkm.tblProject.nProjectId

inner join ret.tblInvoice on 
bkm.tblPart.nProjectId =ret.tblInvoice.nProjectId

left join bkm.tblScopeState on 
ret.tblInvoice.nStatusId =  bkm.tblScopeState.nKeyId

left join bkm.tblInvoiceType on 
ret.tblInvoice.nProjectId=bkm.tblInvoiceType.nProjectId
where  ret.tblInvoice.nTypeId = bkm.tblInvoiceType.nKeyId 
and not bkm.tblPart.dReturnOrder=0
and bkm.tblScopeState.nScopeId=205 and bkm.tblScopeState.nMandantId=4
and ret.tblInvoice.nProjectId=bkm.tblInvoiceType.nProjectId
and bkm.tblPart.nStatusId=3

只要我把最后一行改成
and bkm.tblPart.nStatusId=3 or bkm.tblPart.nStatusId=2

我得到了一个巨大的重复列表,但是当我一个一个地检查它们时,没有&;or &;;表述,一切看起来都对。我不知道该找什么,首先我以为我用错了"join"。语句,但即使只检查一个bkm.tblPart.nStatusId,我也会得到错误的结果。

如果你不像Stu在评论中建议的那样把OR条件放在括号中,你实际上是在指定

where  ret.tblInvoice.nTypeId = bkm.tblInvoiceType.nKeyId 
and not bkm.tblPart.dReturnOrder=0
and bkm.tblScopeState.nScopeId=205 and bkm.tblScopeState.nMandantId=4
and ret.tblInvoice.nProjectId=bkm.tblInvoiceType.nProjectId
and bkm.tblPart.nStatusId=3

nStatusId = 2

省略第一个条件ret.tblInvoice.nTypeId = bkm.tblInvoiceType.nKeyId

有很大的复制机会

最新更新