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。
答案 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;这个问题。