2

列が 1 に設定されていないデータを検索しようとして select ステートメントを実行していますinactiveが、結果は常に空のセットです。なぜこうなった?

 mysql> select id, time, num, inactive from data limit 10;
+--------+------------+------+----------+
| id     | time       | num  | inactive |
+--------+------------+------+----------+
| 276975 | 1388024838 |   55 |     NULL |
| 276976 | 1388025072 |  138 |     NULL |
| 276977 | 1388025435 |  211 |     NULL |
| 276978 | 1388025841 |  240 |     NULL |
| 276979 | 1388026372 |  329 |     NULL |
| 276980 | 1388026515 |  119 |     NULL |
| 276981 | 1388027029 |   57 |     NULL |
| 276982 | 1388027117 |  314 |     NULL |
| 276983 | 1388027251 |   47 |     NULL |
| 276984 | 1388027340 |   68 |     NULL |
+--------+------------+------+----------+
10 rows in set (0.00 sec)

だから私はこれがうまくいくと思っていますが、そうではありません:

mysql> select id from data where inactive != 1;
Empty set (0.01 sec)

詳細は次のとおりです。

mysql> describe data;
+-------------+---------------+------+-----+---------+-------+
| Field       | Type          | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| id          | bigint(20)    | NO   |     | NULL    |       |
| time        | bigint(20)    | YES  |     | NULL    |       |
| num         | int(11)       | YES  |     | NULL    |       |
| inactive    | tinyint(1)    | YES  |     | NULL    |       |
+-------------+---------------+------+-----+---------+-------+
4

2 に答える 2

2

NULL何にも等しくありません。null を明示的に受け入れる必要があります。

select id from data where inactive <>1 or inactive is null;

処理の詳細については、NULLの操作を参照してくださいNULL

于 2014-01-06T21:48:12.497 に答える
1

これは、SQL が 3 つの値を持つロジックを使用するためです。inactive != 1含まれませんNULL

select id from data where inactive != 1 OR inactive IS NULL;
于 2014-01-06T21:47:56.820 に答える