有4张表,student(sid(主键),sex),course(cid(主键),cname),exam(eid(主键),cid(外键),edate(考试日期),cnum(考试次数)),score(sid(外键),eid(外键),grade)(sid,eid)为主键检索学科数据,检索学生成绩,将检索结果保存到一张表中,每学科保留一个分数,如果存在补考成绩,只保存最新的补考成绩,过滤其他成绩,同时将补考成绩后面带*.
学生未参加考试的学科,保存null到grade中。

解决方案 »

  1.   

    select cname,eid,sname,grade,cid,sid,edate
    from exam0315 natural join course0315 cross join 
    student0315 left outer join score0315 
    on score0315.eid=exam0315.eid and score0315.sid=student0315.sid
    order by cid,sid这个可以得到一张总表,但是就是不会对日期和分数处理
      

  2.   

    楼上错了select  cname,eid,sname,grade,cid,sid,edate  
    from  exam  natural  join  course  cross  join    
    student  left  outer  join  score    
    on  score.eid=exam.eid  and  score.sid=student.sid  
    order  by  cid,sid  
     
    这个可以得到一张总表,但是就是不会对日期和分数处理
      

  3.   

    有几点不明: 
    1。补考 是否就是 cnum 大于 1 
    2。取成绩  一般情况下 应该取最高分,而不会是最新
    3。操作表 能不能说得具体一点个人意见。
      

  4.   

    重新改一下有4张表,
    student(sid(主键),sex),
    course(cid(主键),cname),
    exam(eid(主键),cid(外键),edate(考试日期),cnum(考试次数)), cnum check in(1,2,3)
    score(sid(外键),eid(外键),grade,pass)(sid,eid)为主键 pass check in('合格','不合格','补考合格')检索学科数据,检索学生成绩,将检索结果保存到一张表中,每学科保留一个分数,如果存在补考成绩,只保存最新的补考成绩,过滤其他成绩。