Keep on going never give up.

Let's Go

数据库Left Join查询时从右表的多条数据中取1条数据

SQL ServerLonely2020-08-02 00:55:272次0条

挺久没更新文章了,哈哈哈,太多事情忙了呀,最近写代码遇到这个需求,记录下,以免以后忘了。

应用场景

使用Left Join左连接查询时,左表为主要表格,从右表中获取一些列数据作为辅助数据,然而右表中存在多条数据,如何取右表中的1条数据跟左表进行连接查询?

代码

错误情况

SELECT LeftTable.*,RightTable.辅助数据 FROM 左表 AS LeftTable Left Join 右表 AS RightTable ON LeftTable.关联列名 = RightTable.关联列名

该种情况中,由于右表中有多条数据,所以导致查询结果数据重复。

正确情况

SELECT 关联列名,辅助数据,ROW_NUMBER() OVER (PARTITION BY 关联列名 ORDER BY 日期 DESC) AS RowNum from 右表

应先对右表中数据进行筛选,相当于将右表中的数据,按照“关联列名”进行分组,按照“日期”去排序,然后新增了一列“RowNum”,其数值为每一个分组中的序号1,2,3,4,5...等等。

关联列 辅助数据 RowNum
A1001 少年张三 1
A1001 中年张三 2
A1001 老年张三 3
B1001 少年王祖贤 1
B1001 中年王祖贤 2
B1001 老年王祖贤 3
... ... ...

最终完整代码

SELECT LT.*,RT.辅助数据 FROM 左表 AS LeftTable LEFT JOIN (SELECT * FROM (SELECT 关联列名,辅助数据,ROW_NUMBER() OVER (PARTITION BY 关联列名 
ORDER BY 日期 DESC) AS RowNum FROM 右表) AS TempTable WHERE RowNum = 1) AS RightTable ON LeftTable.关联列名 = RightTable.关联列名

取最新日期的辅助数据列内容,作为左表内容的补充。


暗锚,解决锚点偏移

文章评论

    嘿,来试试登录吧!