4

私はこのようなテーブルを持っています

ID   Name    IsDeleted
1    Yogesh  Null
2    Goldy   1

このクエリを実行すると

select  * 
from tableName 
where IsDeleted <> 1

私はID 1記録を取得する必要がありますが、私はそれを取得していません、

しかし、私がこれを実行すると

select  * 
from tableName 
where IsDeleted is null

私はID 1記録を取得します、

なぜ私はこの行動に直面しているのですか?NULL <> 1SQLの本当のステートメントではありませんか?

IsDeletedbitタイプフィールドですAllow Null true

4

6 に答える 6

4
select * from table 
where COALESCE(IsDeleted, 0) <> 1 
-- or ISNULL instead of COALESCE. 
--ISNULL seems to be better in subqueries, but it's not ANSI SQL.

また

select * from table 
where IsDeleted <> 1 or IsDeleted IS NULL
于 2012-07-04T12:26:52.243 に答える
1
select  * 
from tableName 
where isnull(IsDeleted,0) <> 1
于 2012-07-04T12:31:14.153 に答える
1

さまざまなタイプを比較します。この場合、他のタイプ(不明)で比較できません

orステートメントを使用して、各タイプを個別に比較します

WHERE IsDeleted <> 1 OR IsDeleted is null
于 2012-07-04T12:31:38.420 に答える
1

何かを比較すると、null常に結果が得られunknownます。そのため、演算子を使用して、のような関数isを比較または使用したり、置換したりする必要がありますnullCOALESCEisnullnull

于 2012-07-04T12:28:17.703 に答える
1

NULLについて学ぶ-NULL(標準SQL)との比較ではUNKNOWNが生成されますが、これはtrueでもfalseでもありません(そして期待が満たされない理由)。

これを試して:

PRINT CASE
    WHEN 1 = NULL THEN '1 = NULL'
    WHEN 1 <> NULL THEN '1 <> NULL'
    ELSE '1 is neither = NULL nor <> NULL'
END

最初に、NULL値がないことを確認するか(たとえば、ISNULLまたはCOALESCE関数を使用して)、演算子IS NULLまたは。で条件を使用することができIS NOT NULLます。

于 2012-07-04T12:33:15.830 に答える
1

通常の慣例では、本質的に真偽である列がある場合、はい、フィールドのタイプはありません。デフォルト値が0に設定されたビットフィールドを使用する必要があります。

したがって、上記のケースでは、これを実行できます。

select  * 
from tableName 
where IsDeleted = 0

しかし、上記の質問に答えて、Nullがテーブル内の真のNULL値である場合、これはあなたのために機能します:

select  * 
from tableName 
where IsDeleted is null

また

select  * 
from tableName 
where isnull(IsDeleted,0) = 0

レコード1を取得し、

select  * 
from tableName 
where IsDeleted is not null

レコード2を取得するには

幸運を

ポール。

于 2012-07-04T12:36:33.450 に答える