что означает "удалить из таблицы, где NULL = NULL"? - PullRequest
24 голосов
/ 08 июля 2010

Что означает delete from table where NULL = NULL?

Ответы [ 8 ]

37 голосов
/ 08 июля 2010

Это ничего не удалит из таблицы. NULL не равно NULL.

Сейчас

удалить из таблицы, где NULL равен NULL

будет удалять все строки из таблицы.

16 голосов
/ 08 июля 2010

Это означает, что ничего не удаляйте, потому что NULL никогда не равен ничему.Или, может быть, это означает «ничего не удаляйте, если СУБД пользователя действительно не сосет, в этом случае удалите все это несмотря ни на что».

Серьезно, такой тип конструкции обычно возникает, когда предложение WHERE процедурногенерируется - вместо создания специального случая для «ничего не делать», иногда проще просто сгенерировать предложение WHERE, которое заставляет базу данных ничего не делать.Я обычно видел "ГДЕ 0 = 1", хотя это менее двусмысленно.

8 голосов
/ 08 июля 2010

В SQL есть три логических значения, а именно ИСТИНА, ЛОЖЬ и НЕИЗВЕСТНО.когда мы сравниваем ноль с нуль, используя ноль = ноль, операция вернет НЕИЗВЕСТНО.Более того, в предложении WHERE все значения UNKNOWN отфильтрованы. Но запрос ничего не делает.

5 голосов
/ 08 июля 2010

Это наказывает людей, у которых в базе данных отключено ANSI_NULLS:)

3 голосов
/ 08 июля 2010

Резюме:

mysql> select null = null, null <> null, null is null, null = 1, null <> 1;
+-------------+--------------+--------------+----------+-----------+
| null = null | null <> null | null is null | null = 1 | null <> 1 |
+-------------+--------------+--------------+----------+-----------+
|        NULL |         NULL |            1 |     NULL |      NULL |
+-------------+--------------+--------------+----------+-----------+
1 row in set (0.00 sec)


mysql> select count(*) from table;
+----------+
| count(*) |
+----------+
|     10   |
+----------+
1 row in set (0.33 sec)


mysql> select * from table where null;
Empty set (0.00 sec)

То есть, если условие оценивается как ноль, MySql считает его ложным, поэтому delete from table where NULL = NULL фактически ничего не удалит.

NULL - особый зверь, как отмечает Кодд

3 голосов
/ 08 июля 2010

Поскольку NULL не равен NULL, этот оператор ничего не будет делать. Это равно:

DELETE FROM TABLE WHERE 0
2 голосов
/ 08 июля 2010

Я полагаю, что это зависит от базы данных, но, насколько мне известно, она ничего не должна достичь, поскольку NULL никогда не равен NULL, по крайней мере, в теории БД.

0 голосов
/ 08 июля 2010

Эта команда SQL не затрагивает ни одной строки.

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