首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据另一个表更新一个表中每个学生的最高分数

根据另一个表更新一个表中每个学生的最高分数
EN

Stack Overflow用户
提问于 2019-10-29 19:55:20
回答 2查看 57关注 0票数 0

这里有几个表,它们看起来像这样:

表SINHVIEN:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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列。

到目前为止我的代码如下:

代码语言:javascript
复制
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表中每个学生的最高分。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-29 20:21:44

使用与您的尝试类似的连接也应该有效

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-10-29 20:14:59

我认为您只需要一个相关子查询:

代码语言:javascript
复制
update sinhvien s
set diemtb = (
    select max(diem) from ketqua k where k.masv = s.masv)
)

这将更新表sinhvien中的列diemtb,并将其设置为表ketqua中相应masv的最大diem

重读上面的句子:请考虑下一次用英文张贴你的方案……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58606977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档