MySQL查询需求:如何获取无重复的两组不同排序结果集?
解决MySQL两组查询避免重复的方案
第一组查询(按id降序取8条)
建议同时查询id(用于后续排除重复行,避免同名不同行的误判):
SELECT id, name FROM person ORDER BY id DESC LIMIT 8;
第二组查询(按date降序取8条,排除第一组结果)
以下几种方式都能实现需求,可根据你的MySQL版本选择:
- 子查询方式(兼容多数MySQL版本)
SELECT name FROM person WHERE id NOT IN (SELECT id FROM person ORDER BY id DESC LIMIT 8) ORDER BY date DESC LIMIT 8;
- CTE公共表表达式方式(MySQL 8.0及以上版本支持,代码可读性更强)
WITH first_group AS ( SELECT id FROM person ORDER BY id DESC LIMIT 8 ) SELECT name FROM person WHERE id NOT IN (SELECT id FROM first_group) ORDER BY date DESC LIMIT 8;
- LEFT JOIN方式(避免
NOT IN遇到NULL值的潜在问题)
SELECT p.name FROM person p LEFT JOIN (SELECT id FROM person ORDER BY id DESC LIMIT 8) fg ON p.id = fg.id WHERE fg.id IS NULL ORDER BY p.date DESC LIMIT 8;
问题原因说明
之前的两个独立查询出现重复,是因为第一组按id降序选出的行,可能同时属于date较新的范围,会被第二组再次选中。通过排除第一组的唯一标识(id),可以确保第二组结果完全不包含第一组的行。
内容的提问来源于stack exchange,提问作者Axzyte g
相关产品推荐
相关产品推荐

