0

これは他のデータベースでも同様の状況である可能性がありますが、次のクエリを実行すると

SELECT * FROM MyTbl WHERE MyColumn != 'Foo'

次に、MyColumn が 'Bar' であるレコードはフェッチされますが、MyColumn が NULL であるレコードはフェッチされません。これは予想される動作であり、その背後には理由があると思います。その理由を知りたいです。

NULL は 'Foo' と等しいと見なされますか、それとも条件 (NULL != 'Foo') が true のように見えるため、条件の一部であるとは予想されませんか。

4

4 に答える 4

5

DB ロジックでNULLは、このフィールドに定義されたデータがないことを意味します。それは、何かと同じでも異なっているとも考えられていません。関連する行を取得する場合は、明示的にフィルタリングする必要があります。

SELECT * FROM MyTbl WHERE MyColumn != 'Foo' OR MyColumn IS NULL

ウィキペディアを参照してください。

于 2013-01-14T13:52:06.597 に答える
1

SQL Server では、スリーステート ロジックが機能します。つまり、NULL = NULL UNKNOWN which treats as FALSE

于 2013-01-14T13:52:12.370 に答える
0

はい、ティムがコメントしたように、NULL 値は不明です。SQL Server は、一致させるために NULL 値について仮定することはありません。SQL Server が NULL を処理する方法の詳細を確認できます。

于 2013-01-14T13:54:24.253 に答える
0

すべてのリレーショナル データベースで、null 値はそれ自体を含め、何とも等しくありません。

クエリが"select * from MyTbl where MyColumn = null". それらを取得する唯一の方法は"select * from MyTble where MyColumn is null"

詳細な説明については、http://en.wikipedia.org/wiki/Null_ (SQL )を参照してください。

于 2013-01-14T13:53:00.887 に答える