QGISフィルター式の!= NULLとIS NOT NULLの違いは何ですか?


26

とはNULL異なる値にフィルターを適用したい値を含む属性を持つシェイプレイヤーがありますNULL

ここに画像の説明を入力してください

このようなクエリの構築に使用可能なGUIを使用すると、直感的に試すことができます

"obj_art" != NULL

ここに画像の説明を入力してください

どの手段「私から『obj_art』異なる属性を持つすべての機能を与えるNULL(これらのカウント間違いなく、より0より)。このクエリをテストすると、私の観点から奇妙な結果が得られます。

ここに画像の説明を入力してください

これまでに学んだことは、これを使用してこれを達成できることです

"obj_art" IS NOT NULL

質問は違いが何であるか、ある!= NULLIS NOT NULL


私の知る限り、それは単なる構文です。nullが使用されているかどうか。それ以外の場合=または!=
nielsgerrits

「直感的に試してみよう」本当に?どうして?NULLは値ではありません。文字通り値が存在しないことです。NULLを「等しくする」ことはできません。演算子!=は「ではない」という意味ではありません。「等しくない」ことを意味します。IS NOTは「ではない」ことを意味するので、これは完全に直感的だと思います:)
モニカとの明るさレース

理解せずに@LightnessRacesinOrbit NULL私は言う値ではありません使用しようとする直感的=または!=それはあなたが他の価値を評価する方法であるとして。NULL値ではないことがわかって初めて、を使用するIS NOTよりも直感的に使用できるようになり!=ます。多くの人がNULL本当に何であるかを知らない。
ミダバロ

さらに、GUI NULLでは値リスト(上記のcp。)にあるため、「通常の」値として扱われます。そして、ボタンはありませんIS NULL、または私はそのようなものを見逃しましたか?!そのため、このようなクエリを入力し、知識があるNULL場合は、直観について説明できる特別な方法で処理する必要がありますが、このGUIのコンテキストではありません。
ヨッヘンシュヴァルツェ

@Midavalo:それは本当ですが、言語機能を使用せずに、それが何であるかを調べることをお勧めします:)推測によるプログラミングは機能しません。
モニカとの軽さのレース

回答:


33

免責事項: QGISのフィルタリングの構文はSQLで機能するため、ここではSQLルールが適用されると想定しています。それが完全に正しいかどうかは完全にはわかりませんが、それは論理的であり、動作を説明しています。


このフィルターはSQLで機能するため、答えを探す必要があります。

つまり、と組み合わせて論理演算子を使用するとnull、結果は常にnullです。ただし、をテストするためにnull、SQLにはIS (NOT)比較機能が付属しているため、目的のフィルタリングに使用できます。

より詳細な議論については、stackoverflowに関するBohemianの答えを確認してください。


19

NULL値ではないため、何にも=等しく!=も等しくないこともできません。値であるゼロ0異なります。

A NULLは、表示しているセルに値が記録されていないことを示します。値が存在するかどうかを確認するには、セルIS NULLかどうかを尋ねますIS NOT NULL

  • IS NULL セルが空かどうかを確認します
  • IS NOT NULL セルが空でないかどうかを確認します

あなたは値がいくつかのレコードがある場合はOneTwoThree、残りをNULL、あなたはされていないすべて見つけたいTwoあなたのようなものを使用する必要がありますが

value != 'Two' OR value IS NULL

等しい/等しくないクエリでNULL値が返されないため。value != 'Three'結果のみを使用した場合、すべてのNULLレコードが除外さNULLれるため、等しいまたは等しくない可能性のある値ではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.