Обновить столбцы значениями Null - PullRequest
25 голосов
/ 13 октября 2010

Я попытался обновить таблицу следующим образом:

update userloginstats set logouttime = sysdate where logouttime = null;

Не обновлялись столбцы с нулевыми значениями. Что пошло не так?

Ответы [ 5 ]

57 голосов
/ 13 октября 2010

Измените его на

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

NULL - это специальное значение, и мы не можем использовать с ним обычный оператор =.

Из документации Oracle для NULL:

Чтобы проверить наличие нулей, используйте only условия сравнения: NULL и NOT NULL.Если вы используете любое другое условие с нулями, и результат зависит от значения нуля, то результатом будет НЕИЗВЕСТНО, потому что нуль означает отсутствие данных, а ноль не может быть равным или неравным какому-либо значению илиеще один ноль

8 голосов
/ 13 октября 2010

Нельзя сравнивать NULL с =.

Используйте это:

update userloginstats set logouttime= sysdate where logouttime is null;
5 голосов
/ 13 октября 2010

logouttime is null, а не = null. null никогда не равняется ничему, даже самому себе. Таким образом, оператор is.

4 голосов
/ 13 октября 2010

Вам нужно использовать is null, а не = null

update userloginstats set logouttime= sysdate where logouttime is null;
1 голос
/ 14 октября 2010

Для значений NULL вы должны использовать " IS NULL " или " IS NOT NULL " вместо оператора =. Это связано с тем, что технически null не является ни истинным, ни ложным, скорее это отсутствие значения в любом случае.

Большинство языков программирования обычно связывают ноль с ложью для удобства (и, следовательно, позволяют использовать оператор =), но SQL использует более пуристический подход, правильно или неправильно.

...