24

とはdelete from table where NULL = NULLどういう意味ですか?

4

8 に答える 8

37

それはテーブルから何も削除しません。NULL は NULL と等しくありません。

NULL が NULL であるテーブルから削除

テーブルからすべての行を削除します。

于 2010-07-08T06:37:42.743 に答える
16

NULL は何にも等しくならないため、何も削除しないことを意味します。あるいは、「ユーザーの DBMS が本当にひどいものでない限り、何も削除しないでください。その場合は、それにもかかわらず、すべて削除してください」という意味かもしれません。

真剣に、そのような構造は通常、WHERE 句が手続き的に生成されるときに発生します。「何もしない」という特別なケースを作成するよりも、データベースに何も行わせない WHERE 句を生成する方が簡単な場合があります。私は通常、「WHERE 0 = 1」を見てきましたが、これはそれほどあいまいではありません。

于 2010-07-08T06:39:11.347 に答える
8

SQL には、TRUE、FALSE、および UNKNOWN という 3 つの論理値があります。null=null を使用して null と null を比較すると、操作は UNKNOWN を返します。さらに、WHERE 句では、すべての UNKNOWN 値が除外されます。したがって、クエリは何もしません。

于 2010-07-08T07:04:09.527 に答える
5

データベースでANSI_NULLSがオフに設定されている人を罰します:)

于 2010-07-08T14:10:55.683 に答える
3

要約:

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)

つまり、条件が null と評価された場合、MySql によって false と見なされるためdelete from table where NULL = NULL、実際には何も削除されません。

Coddが指摘するように、NULL は特別な獣です。

于 2010-07-08T07:24:41.987 に答える
3

NULL は NULL と等しくないため、このステートメントは何もしません。次のようになります。

DELETE FROM TABLE WHERE 0
于 2010-07-08T06:38:03.923 に答える
2

データベースに依存すると思いますが、少なくともdb理論では、NULLがNULLと等しくなることはないため、私の知る限り、何も達成しないはずです。

于 2010-07-08T06:37:44.863 に答える
-2

この SQL コマンドの影響を受ける行は 1 つもありません。

于 2010-07-08T08:59:37.390 に答える