在mysql
中运行查询时,得到了一些奇怪的结果:
SQL 1:
SELECT *
FROM location
WHERE name LIKE CONCAT('%','SZ','%')
AND `STATUS` = 1
AND location_level IN (4,3)
ORDER BY location_level;
SQL 2:
SELECT *
FROM location
WHERE name LIKE CONCAT('%','SZ','%')
AND `STATUS` = 1
AND location_level IN (4,3)
ORDER BY location_level
LIMIT 2;
2 sql之间的唯一区别是Sql 2
有limit
部分。
执行结果:
Sql 1
有1
行,Sql 2
有0
行
问题:
我希望Sql 2
也应该得到结果,但它没有,任何想法?
@Update:
windows上的mysql似乎已经很老了,我没能阻止它,似乎崩溃了,所以我卸载了它,然后下载mysql5.6,并安装好了,现在2 sql的工作原理是一样的。对于无意义的问题,我们深表歉意。使用mysql5.6现在可以了。
答案 0 :(得分:2)
我在sqlfiddle.com上尝试了,并得到了预期的结果,即1。 我也浏览了mySQL文档并找到了
如果你 将 LIMIT row_count 与 ORDER BY 结合使用, MySQL尽快结束排序 因为它找到了排序结果的第一个row_count行,而不是 比排序整个结果。****(在你的情况下它应该返回1,如果在某种程度上结果没有在中间改变)如果使用索引完成排序, 这非常快。如果必须完成一个filesort,那么所有的行都匹配 选择没有LIMIT子句的查询,以及大部分或全部 在找到第一个row_count之前排序。最初之后 已找到行,MySQL不会对结果的任何其余部分进行排序 设置