0

我有一个客户表,我的客户不想从该表中物理删除任何记录,因此我使用 TINYINT 字段“IsDeleted”来跟踪已删除的客户。

现在我处于需要排除已删除客户的情况,但是当我厌倦了查询时,它给了我更少的记录

select count(*) from customer where IsDeleted <> 1; (Count = 1477)

那么以下

select count(*) from customer where (IsDeleted = 0 or IsDeleted is  null); (Count = 1552)

为什么上述查询计数不同?为什么“NULL”值不计入“IsDeleted <> 1”检查?

请建议。

4

3 回答 3

0

您不能更正对 NULL 值使用比较操作。考虑使用 Not NULL 选项将类型更改IsDeleted为。enum('N','Y')

于 2013-01-16T11:28:07.810 回答
0

Null 不是 int。一旦你做了 <> 1,这意味着它只会查看整数。Null 理想情况下意味着不存在的东西(这就是为什么很多人使用它而不是 0 以防您在表中存储 0)。

如果列中只有空值、0 和 1 值isDeleted,您可能会发现两个查询 (1522-1477) 之间的差异是表中空值的总数 (75)。

于 2013-01-16T11:28:47.683 回答
0

就像 Duniyadnd 和 triclosan 指出的那样,这是由 IsDeleted 的列类型引起的。
更改右侧面板中的查询,以便您可以看到使用 int 和 varchar 列类型之间的区别。sqlfiddle.com/#!2/7bf0a/5

于 2013-01-16T11:52:02.290 回答