-2

「fk_building」が null の場合、これら 2 つのクエリは機能しないことに気付きました。理由がわかりません。ググるのが難しいため、適切な説明が見つからないようです。!=3 が 3 以外のすべてを返さない理由を誰か説明できますか? null行を含む?<=> を使用する必要があるのはなぜですか?

update floor set fk_building = 3 where fk_building != 3 and floor_id = 1;

また

select * from floor where fk_building != 3

fk_building が null の場合は機能しません。

4

4 に答える 4

5

ウィキペディアNULLの値に関する「よくある間違い」セクションを参照することをお勧めします。

エントリから:

たとえば、WHERE 句または条件ステートメントは、列の値を定数と比較する場合があります。フィールドに Null が含まれている場合、欠損値は定数よりも「小さい」または「等しくない」と誤って想定されることがよくありますが、実際には、そのような式は Unknown を返します。

ユーザーが提案したように、RDBMS で許可されている場合は null 安全な演算子を使用するか、IS NULL.

于 2012-09-07T18:13:16.533 に答える
1

nullセーフ演算子を使用する

 update floor set fk_building = 3 where (not fk_building <=> 3) and floor_id = 1;

http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html

于 2012-09-07T18:08:45.460 に答える
0

x <=> 3 を使用して両方をテストすることもできます。

編集:あなたの場合、「x <=> 3」ではありません

于 2012-09-07T18:09:59.157 に答える
0

腹を立てるのではなく、次のことをしてみませんか。

update floor set fk_building = 3 where (fk_building != 3 OR fk_building IS NULL) and floor_id = 1;
于 2012-09-07T18:07:16.850 に答える