MySql не возвращает результаты, как ожидалось - PullRequest
2 голосов
/ 25 ноября 2010
delete FROM tuan_details where tuan_id<>14

При этом должны сохраняться только те строки, в которых tuan_id равен 14, но строки, в которых tuan_id равен нулю, также сохраняются.

Почему это так?

Ответы [ 3 ]

1 голос
/ 13 июля 2012

NULL специально для SQL. У вас есть условие: tuan_id <> 14 будет TRUE только для значений, отличных от 14. Для строк, которые tuan_id равны NULL,:

tuan_id <> 14

будет:

NULL <> 14

, который оценивается как:

UNKNOWN

поэтому эти строки не удалены. WHERE условия выполняются при оценке до TRUE. Они отклоняются, когда они оценивают FALSE или UNKNOWN.

SQL использует 3-значную логику


Итак, если вы также хотите удалить Null, вы можете использовать это утверждение:

DELETE 
FROM tuan_details 
WHERE tuan_id <> 14
   OR tuan_id IS NULL ;
0 голосов
/ 25 ноября 2010

http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html

Вы также можете добавить условие или в ваш запрос

0 голосов
/ 25 ноября 2010

ноль никогда не включается в эти сравнения, вместо этого используется ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...