MS Access查询:按ProductID分组获取最小ColorID的记录
MS Access 查询:每个产品取最小ColorID的图片记录
你原SQL的问题在于子查询取的是全表的最小ColorID,而非每个ProductID对应的最小值,所以无法得到每个产品单独的最小ColorID记录。以下是两种可行的正确写法:
方法一:关联子查询
SELECT i.ProductID, i.ColorID, i.ImageName FROM Images AS i WHERE i.ColorID = ( SELECT MIN(ColorID) FROM Images WHERE ProductID = i.ProductID );
这个写法会针对每一行的ProductID,单独查询该产品对应的最小ColorID,再筛选出匹配的记录,直接满足每个产品取最小ColorID的需求。
方法二:分组子查询关联原表
SELECT i.ProductID, i.ColorID, i.ImageName FROM Images AS i INNER JOIN ( SELECT ProductID, MIN(ColorID) AS MinColorID FROM Images GROUP BY ProductID ) AS sub ON i.ProductID = sub.ProductID AND i.ColorID = sub.MinColorID;
先通过子查询分组得到每个ProductID的最小ColorID,再和原表关联获取对应的ImageName,这种方式在6万条数据的场景下性能表现更稳定。
注意:因为Images表的主键是ProductID+ColorID,每个组合唯一,所以两种方法都会返回每个产品唯一的目标记录。
内容的提问来源于stack exchange,提问作者Lasse Staalung
相关产品推荐
相关产品推荐

