1

MySQL CommunityEdition5.1を使用しています。これは奇妙な問題です。特定の列の値がであるテーブルがありますnull。私たちが持っているとしましょう

table1

| col_1 |   id  |
 null    1

私がこれをするとき:

select col_1 from table1 where id = 1

私はこれを手に入れます->

| col_1 |
 null

しかし、私がこれを行うとき:

select col_1 from table1 where id = 1 and col_1 != "x";

クエリは結果を返しません。

col_1の値は明らかに「x」ではないため、ここでの2番目のクエリは最初のクエリと同じものを返すことを期待しています。なぜこうなった?2番目のクエリが正常に機能するようにするには、どうすればよいですか。id = 1でcol_1、「x」を除くすべての値の行を返しますか?

ありがとう!!

4

3 に答える 3

3

SQLでのNULLの動作を参照してください

NULLを含む2つの値のブール比較は、trueもfalseも返しませんが、SQLの3値論理では不明です。[3]たとえば、NULLがNULLに等しくないことも、NULLがNULLに等しくないことも真ではありません。値がNULLかどうかをテストするには、ISNULLやISNOTNULLなどの式が必要です。

したがって、クエリを次のように変更できます。

select col_1 
from table1 
where id = 1 
    and (col_1 is null or col_1 != 'x');
于 2012-08-21T16:00:19.880 に答える
3

他の人が述べたように、1つ以上のNULLオペランドとの比較は結果になりNULLます。代わりに、MySQLのNULL安全な等式演算子を使用でき<=>ます。

SELECT col_1 FROM table1 WHERE id = 1 AND NOT col_1 <=> "x"
于 2012-08-21T16:07:57.663 に答える
1

mysqlで!=を使用してNULLを値と比較すると、予期しない結果が生じる可能性があります。これはSQLのばかげた癖です(申し訳ありませんが、より良い答えはありません)。それらに対するNULLは、「値がない」ことを意味するため、比較できません。http://dev.mysql.com/doc/refman/5.0/en/working-with-null.htmlを参照してください

試す:

select col_1 from table1 where id = 1 and (col_1 != "x" OR col_1 IS NULL);
于 2012-08-21T16:00:47.880 に答える