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

MySQL如何基于部分字段的唯一组合查询表中全部列

你需要的是对name和variety组合去重,同时保留每个分组下的完整行数据,从你给出的预期结果来看,是保留每个组合下id最小的行,以下是两种常用实现方案:

方案1:MySQL 8.0+ 窗口函数实现

WITH ranked_products AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY name, variety ORDER BY id ASC) AS rn
    FROM Products
)
SELECT id, name, variety, t_min, t_max, entity 
FROM ranked_products 
WHERE rn = 1;

这里用PARTITION BY name, variety对两个字段的组合分组,ORDER BY id ASC保证每个分组内id最小的行排名为1,过滤rn=1的行即可得到预期结果。

方案2:MySQL 5.x 兼容实现

SELECT p.* 
FROM Products p
INNER JOIN (
    SELECT MIN(id) AS min_id 
    FROM Products 
    GROUP BY name, variety
) t ON p.id = t.min_id;

先通过子查询拿到每个name+variety组合对应的最小id,再关联原表拿到对应id的全列数据,效果和窗口函数方案完全一致。

内容的提问来源于stack exchange,提问作者Álex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:06:07