MySQL在“where =”和“where like”之间的计数不同

时间:2016-05-16 22:01:52

标签: mysql

1. select count(*) from tableX where code = "XYZ";
2. select count(*) from tableX where code like "%XYZ";

查询1的结果是18734.< ==不正确

查询2的结果是93003.< ==正确

我们知道查询2的计数是基于独立验证的。

我们希望这两个查询对每个查询具有完全相同的计数,因为我们知道 tableX中没有行的代码以“XYZ”结尾,因此开头的通配符不应该影响查询。

为什么这些查询会产生不同的计数?

我们已经研究过“=”比较和“喜欢”字符串比较之间的差异,但基于我们所有的验证检查,我们仍然不明白为什么这会给我们不同的计数

我们已确认以下内容:

我们使用的是MySQL 5.5.40-0ubuntu0.12.04.1。

3 个答案:

答案 0 :(得分:0)

试试这个以获得答案:

SELECT code
FROM tableX 
WHERE code LIKE "%XYZ"
AND code <> "XYZ"
LIMIT 10

我的猜测是你的一些代码以小写的xyz结尾,而且因为LIKE不区分大小写,所以它匹配的地方=没有。

答案 1 :(得分:0)

where code = "XYZ";提供完全匹配,而where code LIKE "%XYZ";也包含部分匹配。在您的情况下,可能存在额外的空间,这会给出错误的计数。在比较之前考虑修剪

where UPPER(TRIM(code)) = 'XYZ';

答案 2 :(得分:0)

我们重新启动了数据库所在的服务器,我们重新运行了查询,现在它们都产生了预期的正确结果......

我们必须研究为什么这个&#34;固定&#34;这个问题。