一张考试表,一张试卷表(考试ID,学生ID,状态0是未考,1是已考)一张学生表,一张收藏表(考试ID,学生ID)学生查询自己收藏的考试,如果收藏表有该学生的ID并且要判断试卷表有没有该学生的ID,如果有就显示状态已考,不在已收藏模块显示,如果试卷表里面没有学生的ID,说明只是收藏了还并没有考试,显示在已收藏模块里面。
SSM框架,MySQL数据库
我该怎么写查询语句呢?

解决方案 »

  1.   

    have a tryselect a.* 
    from 收藏表 a 
    where a.学生ID = 当前学生的ID 
    and (exists (select * from 试卷表 where 考试ID=a.考试ID and 学生ID=a.学生ID and 状态=0) 
    or not exists (select * from 试卷表 where 考试ID=a.考试ID and 学生ID=a.学生ID))
      

  2.   

    正确逻辑应该是基础表
    一张试卷表(试卷ID)
    一张学生表(学生ID)
    关联表
    一张考试表(试卷ID,学生ID),【说明:考试表里若有记录,则表示已考,若无则表示未考】
    一张收藏表(试卷ID,学生ID)找出收藏表的考试状态:
    select a.*,decode(b.试卷ID,is not null,'已考','未考') 
    from 收藏表 a left join 考试表 b 
    on a.试卷ID=b.试卷ID and a.学生ID=b.学生ID