为什么Mysql查询计数不同?

时间:2013-01-16 11:23:23

标签: mysql

我有一个Customer表,我的客户希望不从该表中删除任何记录,因此我使用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&lt;&gt; 1”检查?

请建议。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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