这里有几个表,它们看起来像这样:
表SINHVIEN:
MaSV HoSV TenSV GioiTinh NgaySinh NoiSinh MaKH HocBong DiemTB
SV01 Lê Kim Lan Nữ 23/02/1990 Hà nội HTTT 130000
SV02 Trần Minh Chánh Nam 24/12/1992 Bình Định MANG 150000
SV03 Lê An Tuyết Nữ 21/02/1991 Hải phòng HTTT 170000
SV04 Trần Anh Tuấn Nam 20/12/1993 TpHCM MANG 80000
SV05 Trần Thị Mai Nữ 12/08/1991 TpHCM CNPM 0
SV06 Lê Thị Thu Thủy Nữ 02/01/1991 An Giang HTTT 0
SV07 Nguyễn Kim Thư Nữ 02/02/1990 Hà Nội CNPM 180000
SV08 Lê Văn Long Nam 08/12/1992 TpHCM HTTT 190000 表KETQUA:
Masv MaMH LanThi Diem KetQua
SV01 CSDL 1 3
SV01 CSDL 2 6
SV01 TTNT 1 5.5
SV01 TTNT 2 6
SV01 MMT 1 5
SV02 CSDL 1 4.5
SV02 CSDL 2 7
SV02 MMT 1 10
SV02 CTDL 1 9
SV03 CSDL 1 2
SV03 CSDL 2 5
SV03 MMT 1 2.5
SV03 MMT 2 4
SV04 CSDL 1 4.5
SV04 CTDL 1 10
SV05 CSDL 1 7
SV05 MMT 1 2.5
SV05 MMT 2 5
SV06 TTNT 1 6
SV06 DHMT 1 10 我想为每个学生更新DiemTB (这是每个学生的最高分),以便为每个MonHoc表中的每个KETQUA表中的DIEM列。
到目前为止我的代码如下:
UPDATE SINHVIEN
SET DIEMTB = T2.DIEM
FROM SINHVIEN JOIN KETQUA T2
ON SINHVIEN.MASV = T2.MASV AND T2.DIEM = (SELECT MAX(DIEM) FROM KETQUA GROUP BY MASV)我知道没有一种正确的方法可以像这样为每个学生更新DIEM,因为这个语句(SELECT MAX(DIEM) FROM KETQUA GROUP BY MASV)返回每个学生的最高分,但T2 DIEM一次可以处理一个学生。你能帮我修改这个代码吗?这样我的代码就可以根据DIEM on KETQUA表更新Sinhvien表中每个学生的最高分。谢谢!
发布于 2019-10-29 20:21:44
使用与您的尝试类似的连接也应该有效
UPDATE SINHVIEN
SET DIEMTB = T2.MAXDIEM
FROM SINHVIEN JOIN
(SELECT MAX(DIEM) AS MAXDIEM, MASV FROM KETQUA GROUP BY MASV) T2
ON SINHVIEN.MASV = T2.MASV发布于 2019-10-29 20:14:59
我认为您只需要一个相关子查询:
update sinhvien s
set diemtb = (
select max(diem) from ketqua k where k.masv = s.masv)
)这将更新表sinhvien中的列diemtb,并将其设置为表ketqua中相应masv的最大diem。
重读上面的句子:请考虑下一次用英文张贴你的方案……
https://stackoverflow.com/questions/58606977
复制相似问题