-- 【错误写法】利用排序+分页,你会发现得不到正确结果,百度其他人原因有种说法是: -- 在同时使用order by和limit时,MySQL进行了某些优化,将语句执行逻辑从"where——order by——limit" -- 变成了"order by——limit——where",导致在某些情况下, -- 同时使用order by和limit会导致查无结果(或结果数量不足)。具体出现问题与否是与表中数据有关的。 SELECT * FROM wms_material_io WHERE 1=1 AND WML_COMPAYN_ID=2 AND WML_MATERIALS_CODE='xxxxxxxxxxx' AND WML_DEL=0 ORDER BY WML_CREATETIME ASC LIMIT 0,1; -- 【正确用法】需要加个子查询 SELECT * FROM ( SELECT * FROM wms_material_io WHERE 1=1 AND WML_COMPAYN_ID=2 AND WML_MATERIALS_CODE='xxxxxxxxxxx' AND WML_DEL=0 ORDER BY WML_CREATETIME ASC) AS tmp_wml LIMIT 1; -- 使用子查询(排序+分组) SELECT * FROM wms_material_io WHERE WML_ID in( SELECT WML_ID FROM wms_material_io WHERE 1=1 AND WML_COMPAYN_ID=2 AND WML_MATERIALS_CODE='xxxxxxxxxxx' AND WML_DEL=0 ORDER BY WML_CREATETIME ASC ) GROUP BY WML_MATERIALS_CODE, WML_COMPAYN_ID;