2012-10-26 172 views
0

我有两个文本字段的表,两者都具有长度的索引= 4Mysql表损坏?

SELECT COUNT(*) cnt FROM `mytable` WHERE `field1` = ‘blue’; 

显示我4个记录和

SELECT COUNT(*) cnt FROM `mytable` WHERE `field2` = ‘blue’; 

显示我另一个4条记录(不同的结果)

但是:

SELECT COUNT(*) cnt FROM `mytable` WHERE `field1` = ‘blue’ OR `field2` = ‘blue’; 

显示我只有5条记录!为什么???

当我使用DESCRIBE SELECT等(不COUNT)它告诉我下面的:

ID SELECT_TYPE表类型possible_keys关键key_len裁判行额外 1个SIMPLE MYTABLE index_merge字段1,字段2字段1,字段2 6,6 NULL 495使用sort_union(field1,field2);使用其中

这怎么可能?为什么我看不到所有8条记录?

(注:我已经更换了表名,因为真正的名字是荷兰)

如果您需要更多的表信息,我将它张贴。

请帮忙。

+2

结果,其中字段1是蓝色或field2是蓝色可能会重叠。 –

回答

0

你需要

SELECT COUNT(*) cnt FROM mytable WHERE field1 = ‘blue’ AND field2 <> ‘blue’; 
SELECT COUNT(*) cnt FROM mytable WHERE field2 = ‘blue’ AND field1 <> ‘blue’; 
SELECT COUNT(*) cnt FROM mytable WHERE field2 = ‘blue’ AND field1 = ‘blue’; 
+0

第一个查询:8条 第二个查询:8条 第三个查询:0记录 –

+0

你确定,你拥有所有的'field1'和'field2'和'='和'<>'吧? –

0

只要做'SELECT * FROM mytable WHERE field1 = ‘blue’ OR field2 = ‘blue’;',你会看到你的问题:)这其实并不是一个问题,因为field1field2可能都在一排具有价值blue

+0

有有在这两个领域相同的值没有任何记录。 SELECT COUNT(*)FROM CNT WHERE MYTABLE FIELD2 = '蓝色' AND FIELD1 = '蓝色'; 显示为0的记录。 –