2013-01-16 64 views
0

我有一个客户表,我的客户希望不从这个表中物理删除任何记录,因此我使用TINYINT字段“IsDeleted”来跟踪删除的客户。为什么Mysql查询计数不同?

现在的情况下,我需要排除中删除的客户即时通讯,但是当我累了下面的查询它给我少的记录

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”检查?

请建议。

+0

首先尝试按照IsDeleted对结果进行分组,并查看您有哪些不同的值isDeleted –

+0

在右侧面板中更改查询,以便您可以看到使用int和varchar列类型。 http://www.sqlfiddle.com/#!2/7bf0a/5 –

回答

0

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

+0

感谢所有的明确解释.. –

+0

很高兴帮助。顺便说一句,这是你如何改变它。 “更新客户SET IsDeleted = 0,其中IsDeleted为空;” sqlfiddle.com/#!2/cc9f1/1/0 –

0

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

0

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

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

相关问题