2017-08-08 4 views
2

ユーザーが要求したクエリを少し変更したときに、私はAccess 2010データベースが異常に動作しています。クエリが実行されてからユーザー入力フォームにフィードされる非常に大きな1つのテーブル(質問しません)があります。とにかく、今日、特定の1つのフォームが、期待していたよりもはるかに少ない結果を返すようになりました。通常は約1200件の結果が返されますが、マイナーチェンジ後は880件に減少しました。私がそれを確認していたとき、それは1100に落ちただけなので、私はさらに300の期待された結果を欠いています。NOT LIKE条件を追加した後に結果が少なすぎるクエリ

このテーブルへのクエリは、奇妙なものにならないように、レイヤーで作成します。私は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)); 

そして、ここにSQLが第二である:

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

ようになっているはずであるあなたは、おそらく ため、where句[Day2Day InvPmt Aを簡略化することができ] .INV_PT_DT を使用して 'どこでLen([Day2Day InvPmt a] .INV_PT_DT&" ")> 0と[Day2Day InvPmt a]。[Step 1 notes])好きではない" * windsh * "' クエリも同様です。ワイルドカードを風の前後にしたいですか? – Minty

+0

@Minty私は一貫性のない命名規則を扱っているので、前後にワイルドカードが必要です。なぜ私は "LEN"のものが役に立つのかよく分かりません。 –

+1

あなたは、[Day2Day InvPmt a] WHERE Nz(INV_PT_DT、 "" = "" AND [Step 1 notes] LIKE "* windsh *" 'は、除外したい追加行の数に対して妥当な値を返します。 –

答えて

4

Not Like演算子はNULL値と一致していません。明示的に(再)Nullを含める必要があります。基準グリッド上のデザインビュー内

あなたは、SQL文の中で

Not Like "*windsh*" Or Is Null 

のようなものを入力し

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

ビンゴ!それがトリックでした。どうもありがとうございます。それは私がExcelで手動ですべてを操作するときに得たものと一致します –

+1

素晴らしい!私が欲求不満なクエリ結果を得たとき、NULLが私の心の中でポップアップする最初の赤旗です。 Nullの値がブール演算にどのように伝播するかについての規則がありますが、必ずしも直感的ではありませんので、特別なテストがなければ何も仮定しません。 –

+0

私はそれが次の時に思い浮かびます。私はそれがこの悪いことをねじ込むことができるideを持っていませんでした –

関連する問題