我有一个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”检查?
请建议。
答案 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