当前位置: 代码迷 >> Sql Server >> 请问大牛们一个“一对多的关系查询的有关问题”
  详细解决方案

请问大牛们一个“一对多的关系查询的有关问题”

热度:56   发布时间:2016-04-24 09:36:13.0
请教大牛们一个“一对多的关系查询的问题”
 查询A表所有的数据,
A表字段有 ID,Name

  A表与B表的FK_AID关联,A表与B表是一对多的关系
  B表字段有,ID,FK_AID,URL,UpdatDate

  需要查询A表数据时查询B表的最后更新的一条数据 
------解决思路----------------------
两表关联然后用max来过滤
------解决思路----------------------
SELECT *
  FROM A
OUTER APPLY (SELECT TOP 1 *
               FROM B
              WHERE B.FK_AID = A.ID
             ORDER BY UpdateDate DESC) B1

------解决思路----------------------
SELECT
*
FROM
A LEFT JOIN
(SELECT ROW_NUMBER()OVER(PARTITION BY FK_AID ORDER BY UpdatDate DESC)RN,* FROM B)T
ON A.ID=T.FK_AID AND T.RN=1

------解决思路----------------------
这个是开窗函数的东西~~

开窗函数的 OVER 关键字后括号中的可以使用 PARTITION BY 子句来定义行的分区来供进行聚合计算。与 GROUP BY 子句不同,PARTITION BY 子句创建的分区是独立于结果集的,创建的分区只是供进行聚合计算的,而且不同的开窗函数所创建的分区也不互相影响。
  相关解决方案