MYSQL,查询列表,一张主表一张子表,一主多子,查询的时候把最新的子数据查出来
1、一张主表,一张子表,一主多子,分页查询的时候,不仅主表信息带出而且要有子表的最新数据,没有子表信息,主表信息也要展示出来。
2、乍一看好像简单,但实际并不简单,简单的左连或者是右连根本无法满足需求。
3、主要难点就是在子表中查询出每个主表数据的最新数据。因此先对子表进行排序。
将子数据按照主表的主键分组,然后排序,每个分组内的行分配1个行号,最新的子数据(即时间戳最大的)会被分配行号1。
select
sub.*,
ROW_NUMBER()OVER(PARTITION BY sub.EMERGENCE_ID ORDER BY sub.CREATE_TIME DEsc ) rn
from mem_emergence_record sub
join mem_emergence_plan main ON sub.EMERGENCE_ID = main.id
4、再关联主表取数据即可:
WITH RankedSubTable As(
select
sub.*,
ROW_NUMBER()OVER(PARTITION BY sub.EMERGENCE_ID ORDER BY sub.CREATE_TIME DEsc) as rn
from mem_emergence_record sub -- 子表
join mem_emergence_plan main ON sub.EMERGENCE_ID = main.id
)
SELECT
t1.*,
t2.PLAN_REVIEWED_COMMENTS planReviewedComments
-- 这里写你需要的查询结果
from mem_emergence_plan t1 -- 主表
LEFT join RankedSubTable t2 ON t1.id= t2.EMERGENCE_ID AND t2.rn = 1
where t1.`STATUS`=1
--这里写需要的查询条件