根据另一张桌子更新一张桌子中每个学生的最高分数

时间:2019-10-29 11:55:20

标签: sql sql-server

这里有几个表,如下所示:

表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表中每个学生的最高分数? 谢谢!

2 个答案:

答案 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

重新阅读以上句子:请考虑下次使用英语发布您的架构...