web-dev-qa-db-ja.com

NULL値で列を更新する

私は次のようにテーブルを更新しようとしました:

update userloginstats set logouttime = sysdate where logouttime = null;

NULL値で列を更新しませんでした。何が悪かったのか?

25
nath

に変更する

...where logouttime is null;
                    ^^^^^^^

NULLは特別な値であり、通常の=演算子。

NULLのOracleドキュメント から:

Nullをテストするには、only比較条件IS NULL and IS NOT NULL。NULLを含む他の条件を使用し、結果がNULLの値に依存する場合、NULLはデータの欠如を表すため、結果はUNKNOWNになります。nullcannot任意の値または別のnullと等しいか等しくない

60
codaddict

NULLを=と比較することはできません。

これを使って:

update userloginstats set logouttime= sysdate where logouttime is null;
8
Lucero

logouttime is nullではなく= nullnullは、それ自体ではなく、決して何にも等しくなりません。したがって、演算子is

5
Donnie

is nullではなく= nullを使用する必要があります

update userloginstats set logouttime= sysdate where logouttime is null;
4
Macros

Nullの場合、=演算子ではなく、「IS NULL」または「IS NOT NULL」を使用する必要があります。これは、nullが技術的に真でも偽でもないためであり、どちらの場合も値が存在しないためです。

ほとんどのプログラミング言語は、通常、便宜上nullとfalseを関連付けます(したがって、=演算子の使用を有効にします)が、SQLはより純粋なアプローチを正しくまたは誤って採用します。

1
Maltronic