You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询需求:如何获取无重复的两组不同排序结果集?

解决MySQL两组查询避免重复的方案

第一组查询(按id降序取8条)

建议同时查询id(用于后续排除重复行,避免同名不同行的误判):

SELECT id, name FROM person ORDER BY id DESC LIMIT 8;

第二组查询(按date降序取8条,排除第一组结果)

以下几种方式都能实现需求,可根据你的MySQL版本选择:

  1. 子查询方式(兼容多数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;
  1. 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;
  1. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:50:23