所以我在它的末尾得到了这个查询,我寻找一个特定的值,可以是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