这里有几个表,如下所示:
表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(这是每个学生的最高分),以便根据KETQUA表中的DIEM列为Sinhvien表中的每个MonHoc。
到目前为止,我的代码:
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可以一次处理一个学生。
您能帮我修改此代码吗,以便我的代码可以根据KETQUA表上的DIEM更新Sinhvien表中每个学生的最高分数?
谢谢!
答案 0 :(得分:1)
这也应该使用与您的尝试类似的联接
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
答案 1 :(得分:0)
我认为您只需要一个相关的子查询:
update sinhvien s
set diemtb = (
select max(diem) from ketqua k where k.masv = s.masv)
)
这将更新表diemtb
中的列sinhvien
,并将其设置为表diem
中相应masv
的最大值ketqua
。
重新阅读以上句子:请考虑下次使用英语发布您的架构...