添加NOT LIKE条件后,查询返回的结果太少

时间:2017-08-08 14:57:45

标签: ms-access ms-access-2010

我有一个Access 2010数据库,当我略微改变用户请求的查询时,它表现得很奇怪。我有一个非常大的表(不要问)查询运行,然后提供给用户输入表单。无论如何,今天,一种特殊的形式开始返回的结果比我们预期的少得多。它通常返回大约1200个结果,但在次要更改后,结果降至880。当我检查时,它应该只下降到1100,所以我错过了额外的300个预期结果。

我在层中构建对此表的查询,以防止事情变得太奇怪。我对sql不太满意,所以我通常只使用设计视图来构建。如果必须,我可以在sql中混淆。

这是第一层的SQL

SELECT [New ZSPWAR Prime].Payer, [New ZSPWAR Prime].Bill_doc, [New ZSPWAR Prime].Sqwak, [New ZSPWAR Prime].Billing_Dt, [New ZSPWAR Prime].Issued_Material, [New ZSPWAR Prime].Serial_No, [New ZSPWAR Prime].[review date], [New ZSPWAR Prime].Mtrl_Qty_Billed, [New ZSPWAR Prime].PO_DT, [New ZSPWAR Prime].PO_NO, [New ZSPWAR Prime].PO_PI, [New ZSPWAR Prime].INV_PT_DT, [New ZSPWAR Prime].[Warr Typ], [New ZSPWAR Prime].Stage, [New ZSPWAR Prime].Returned_Material, [New ZSPWAR Prime].Returned_SNR, [New ZSPWAR Prime].Ret_EQUI, [New ZSPWAR Prime].Sales_Ord, [New ZSPWAR Prime].SVO_No, [New ZSPWAR Prime].[ME23N PO_Owner], [New ZSPWAR Prime].Ret_Note, [New ZSPWAR Prime].Ret_Date, [New ZSPWAR Prime].Ret_Note_DESC, [New ZSPWAR Prime].WACD, [New ZSPWAR Prime].Wty_Prog_Code_Desc, [New ZSPWAR Prime].VR_Amount, [New ZSPWAR Prime].Freight_Amt, [New ZSPWAR Prime].VDCD, [New ZSPWAR Prime].Ven_Den_Code_Desc, [New ZSPWAR Prime].ZZ07, [New ZSPWAR Prime].[root cause] AS [Email Follow Up], [New ZSPWAR Prime].[Step 1 Complete], [New ZSPWAR Prime].[Step 1 notes], [New ZSPWAR Prime].[Step 2 complete], [New ZSPWAR Prime].[step 2 notes], [New ZSPWAR Prime].[Step 3 complete], [New ZSPWAR Prime].[step 3 notes], [New ZSPWAR Prime].[Push INV_PMT], [New ZSPWAR Prime].[PO Due Date]
FROM [New ZSPWAR Prime]
WHERE ((([New ZSPWAR Prime].Payer) Not Like "10208" And ([New ZSPWAR Prime].Payer) Not Like "2300" And ([New ZSPWAR Prime].Payer) Not Like "32770") AND (([New ZSPWAR Prime].Billing_Dt)>#7/1/2016#) AND (([New ZSPWAR Prime].Mtrl_Qty_Billed)>0) AND (([New ZSPWAR Prime].PO_NO) Not Like "" And ([New ZSPWAR Prime].PO_NO) Is Not Null) AND (([New ZSPWAR Prime].[Step 3 complete])<>Yes));

这是第二个:

SELECT [Day2Day InvPmt a].Payer, [Day2Day InvPmt a].Bill_doc, [Day2Day InvPmt a].Sqwak, [Day2Day InvPmt a].Billing_Dt, [Day2Day InvPmt a].Issued_Material, [Day2Day InvPmt a].Serial_No, [Day2Day InvPmt a].[review date], [Day2Day InvPmt a].Mtrl_Qty_Billed, [Day2Day InvPmt a].PO_DT, [Day2Day InvPmt a].PO_NO, [Day2Day InvPmt a].PO_PI, [Day2Day InvPmt a].INV_PT_DT, [Day2Day InvPmt a].[Warr Typ], [Day2Day InvPmt a].Stage, [Day2Day InvPmt a].Returned_Material, [Day2Day InvPmt a].Returned_SNR, [Day2Day InvPmt a].Ret_EQUI, [Day2Day InvPmt a].Sales_Ord, [Day2Day InvPmt a].SVO_No, [Day2Day InvPmt a].[ME23N PO_Owner], [Day2Day InvPmt a].Ret_Note, [Day2Day InvPmt a].Ret_Date, [Day2Day InvPmt a].Ret_Note_DESC, [Day2Day InvPmt a].WACD, [Day2Day InvPmt a].Wty_Prog_Code_Desc, [Day2Day InvPmt a].VR_Amount, [Day2Day InvPmt a].Freight_Amt, [Day2Day InvPmt a].VDCD, [Day2Day InvPmt a].Ven_Den_Code_Desc, [Day2Day InvPmt a].ZZ07, [Day2Day InvPmt a].[Email Follow Up], [Day2Day InvPmt a].[Step 1 Complete], [Day2Day InvPmt a].[Step 1 notes], [Day2Day InvPmt a].[Step 2 complete], [Day2Day InvPmt a].[step 2 notes], [Day2Day InvPmt a].[Step 3 complete], [Day2Day InvPmt a].[step 3 notes], [Day2Day InvPmt a].[Push INV_PMT], [Day2Day InvPmt a].[PO Due Date]
FROM [Day2Day InvPmt a]
WHERE ((([Day2Day InvPmt a].INV_PT_DT) Is Null) AND (([Day2Day InvPmt a].[Step 1 notes]) Not Like "*" & "windsh*")) OR ((([Day2Day InvPmt a].INV_PT_DT) Like "") AND (([Day2Day InvPmt a].[Step 1 notes]) Not Like "*" & "windsh*"))
ORDER BY [Day2Day InvPmt a].Bill_doc;

罪魁祸首就在这里:

WHERE ((([Day2Day InvPmt a].INV_PT_DT) Is Null) AND (([Day2Day InvPmt a].[Step 1 notes]) Not Like "*" & "windsh*")) OR ((([Day2Day InvPmt a].INV_PT_DT) Like "") AND (([Day2Day InvPmt a].[Step 1 notes]) Not Like "*" & "windsh*"))

不包括“windsh *”的部分是最近的混淆和混乱的来源。

在加入一点之前,我得到了1200回报。之后,我得到880.我试图反过来建立这个,只有100或者应该被过滤掉,我不知道它为什么这样做。有什么想法,或者这已在其他地方得到解答?

提前致谢

1 个答案:

答案 0 :(得分:4)

Not Like运算符与Null值不匹配,即使Null值显然与模式不匹配。您需要明确(重新)包含Null。

在条件网格的设计视图中输入类似

的内容
Not Like "*windsh*" Or Is Null

在SQL语句中应该看起来像

(([Day2Day InvPmt a].[Step 1 notes]) Not Like "*windsh*" Or ([Day2Day InvPmt a].[Step 1 notes]) Is Null)