首页 > 解决方案 > 更新按 Batch.dateCreated asc 排序的学生,其中 Batch.PK 和 Student.BatchFK 匹配

问题描述

我在 sql server 中有两个表 - Student 和 Batch。

学生桌就是这种性质——

ID | studentname | batchTypeFfk | batchName
1  | Rob         | 1            |  Eng

批处理表具有这种性质 -

ID | name | batchTypeFk | date
1  | Eng  | 1           | 05/18/2019
2  | Mtt  | 1           | 05/20/2019

批处理类型具有这种性质 -

ID | name  |
1  | Summer

我的挑战是按日期升序对批处理表进行排序,并使用最新日期更新 Student.batchName 表,其中 Batch.batchypeFk = Student.batchTypeFk 考虑到可能有尽可能多的批处理具有不同的批处理类型,并且尽可能多的学生使用使用 sql server 的批处理类型

我有这样的尝试,但它没有解决问题,因为它有 sql 错误

UPDATE a.batchName
  FROM STUDENT a, BATCH b
  where a.batchTypeFk == b.batchTypeFk orderby data asc

标签: sqlsql-server

解决方案


我想,你可以这样更新。

Create Table #Batch
(
Id Int
,name varchar(50)
,batchTypeFk Int
,date datetime
)

Insert Into #Temp_St
Values
(1,'Rob',1,'Eng')

Insert Into #Batch
Values
(1,'Eng','1','20190518')
,(2,'Mtt',1,'20190520')

与 Cte

As
(
Select ROW_NUMBER() OVER (Order By date desc) as rn,s.*
From #Batch b
Inner Join #Temp_St s On b.batchTypeFk=s.batchTypeFk
)

更新 Cte

Set batchName='Summer' 
Where rn=1

推荐阅读