如何在MS Access SQL中实现主表关联子表最大行数据?
MS Access SQL实现主表关联子表对应最大someValue行
基础实现方案(适用于需保留所有同最大值行的场景)
先通过子查询统计每个主表关联项对应的子表最大someValue,再将主表、子表与统计结果关联,筛选出匹配的行:SELECT a.*, b.* FROM tableA AS a INNER JOIN tableB AS b ON a.id = b.a_id INNER JOIN ( SELECT a_id, MAX(someValue) AS max_someValue FROM tableB GROUP BY a_id ) AS b_max ON b.a_id = b_max.a_id AND b.someValue = b_max.max_someValue;单一行匹配方案(若同最大值有多行,仅返回其中一行)
如果需要每个主表行仅关联子表中someValue最大的一行(比如按子表主键排序取最后一条),可以用带TOP 1的子查询:SELECT a.*, b.* FROM tableA AS a INNER JOIN tableB AS b ON a.id = b.a_id WHERE b.id = ( SELECT TOP 1 id FROM tableB WHERE a_id = a.id ORDER BY someValue DESC, id DESC );简化版单值匹配
若只需确保someValue是最大值,无需处理同值多行的情况,可使用更简洁的子查询:SELECT a.*, b.* FROM tableA AS a INNER JOIN tableB AS b ON a.id = b.a_id WHERE b.someValue = ( SELECT MAX(someValue) FROM tableB WHERE a_id = a.id );
内容的提问来源于stack exchange,提问作者Alex Haslam
相关产品推荐
相关产品推荐

