2017-06-28 8 views
0

私は次のような問題があります。where文でnullを無効にしています。 NULL値ない

私は、彼らは両方のデータを選択され、インポートされたデータを解析するために2つのクエリを使用しています インポートデータセットはかなり複雑ですが、これは、エラーを再現します。

QueryA:

SELECT CDbl(FieldA) As DblA, Imported.* From Imported WHERE FieldA IS NOT NULL 

QueryB:QueryAが正常に動作

SELECT * FROM QueryA WHERE DblA > 7 AND DblA < 600 

私はテーブルと実行にQueryAからの結果を挿入すると、QueryBがnullエラー

の不正な使用をスローしますしかし、私はエラーが表示されませんが、これは望ましくありません。

QueryBからWHEREを削除しても正常に動作します。

別の回避策がありますか?または、私は冗長テーブルを受け入れるべきですか?

+0

'NZ'で解決できますか? 'SELECT * FROM QueryA WHERE NZ(DblA、0)> 7 AND NZ(DblA、0)<600 '。 Null値はすべて0に置き換えられます。 –

+0

@ DarrenBartrup-Cook 'NZ'はそれを解決しません。その列にはNULL値はありません。 –

+1

私はQueryAからまず 'Imported。*'を削除して、明示的にQueryAにフィールドを追加し始めることをお勧めします。 ms-accessに問題があるフィールドをデータセットに見つけることができます。 – manotheshark

答えて

0

ああ、それはまだ、なぜか分かりません。

は限り私のSQLの知識が、これはすべての違いを作るべきではない行くが、それがそうであるようQueryA

SELECT CDbl(Nz(FieldA, 999)) As DblA, Imported.* From Imported WHERE FieldA IS NOT NULL AND Nz(FieldA, 999) <> 999 

を変更しました。誰かがそれを説明できるなら、私はそれを歓迎するだろう。

0ではなく、999があります。それ以外の場合は、他の関数で0エラーで除算されるためです(除外されているため、実際にAccessにアクセスする必要はありません)。

+1

私は、クエリオプティマイザが問題だと思います。私の推測では、 'FieldA IS NOT NULL'の前に' DblA> 7 AND DblA <600'セクションを評価しようとしています。別のクエリとしてそれらを実行しません。これは、多くのデータを返すクエリから選択すると速度が向上しますが、クエリが期待どおりの順序で実行されないと、これらの奇妙なエラーが発生する可能性があります。 – Quark

+0

@Quarkは説明に感謝します。私はいつも奇妙なことをしているオプティマイザがMS SQLのものだと思っていましたが、Accessは順番に処理しましたが、私は間違っていたと思います。あるコースでは、他のクエリを参照する代わりにサブクエリを使用する必要があることもわかりました。そうしないと、オプティマイザは機能しませんでした。 –

+0

それはそれが何をしているのかということは私には意味がありますが、私はそれに関する文書を持っていません。それ以外の場合は、私は答えとして投稿しているでしょう:) – Quark

0

このクエリを試してみてください。

SELECT * FROM QueryA WHERE DblA > 7 AND DblA < 600 AND Dbla IS NOT NULL 
+0

いいえ、まだ無効ですnull –

+0

クエリAで範囲条件を適用してみませんか? SELECT CDbl(FieldA)DblA、Imported。*インポートされたWHEREフィールドAはNULLではなく、FieldA> 7およびFieldA <600です。 –

+0

QueryAに依存する複数のクエリがあり、実際にはQueryAはIIFステートメントを使用しており、3つのフィールドのいずれかからDblAを取得しています。 –

関連する問題