有一个学生表,一个数学成绩表,一个语文成绩表,一个英语成绩表,有些学生只参加了一门考试,有些学生参加其中的两门考试,还有一些参加了全部考试,我想编写一个查询,查询所有学生的考试情况,不知如何写,谢谢您的帮助。
学生表字段:姓名,性别
语文表字段:姓名,成绩
数学表和英语表同语文表。期待:
姓名 语文 数学 英语
--------------------
张三       87   86
李四  95   25   74
王五  25
---------------------

解决方案 »

  1.   

    select 学生表.姓名,语文表.成绩,数学表.成绩,英语表.成绩
    from   学生表
    left   join 语文表 on 学生表.姓名=语文表.姓名
    left   join 数学表 on 学生表.姓名=数学表.姓名
    left   join 英语表 on 学生表.姓名=英语表.姓名
      

  2.   

    我表述错误,应该是:姓名 语文 数学 英语
    --------------------
    张三  X    V   V
    李四  V   V   V
    王五  V   X   X
    ---------------------
    其中X表示未参加该项目考试,V恰好相反,表名已参加该项目考试
      

  3.   

    select t.姓名,
           t1.成绩 语文 
           t2.成绩 数学 
           t3.成绩 英语
    from 学生表 t
    left join 语文表 t1 on t.姓名 = t1.姓名
    left join 数学表 t2 on t.姓名 = t2.姓名
    left join 英语表 t3 on t.姓名 = t3.姓名
      

  4.   


    select t.姓名,
           case when t1.成绩 is null then 'X' else 'V' end 语文,
           case when t2.成绩 is null then 'X' else 'V' end 数学, 
           case when t3.成绩 is null then 'X' else 'V' end 英语
    from 学生表 t
    left join 语文表 t1 on t.姓名 = t1.姓名
    left join 数学表 t2 on t.姓名 = t2.姓名
    left join 英语表 t3 on t.姓名 = t3.姓名
      

  5.   

    select t.姓名,
           case when t1.成绩 is null then 'X' else 'V' end 语文,  --上面那个“,”看起来是中文状态的,改了下
           case when t2.成绩 is null then 'X' else 'V' end 数学, 
           case when t3.成绩 is null then 'X' else 'V' end 英语
    from 学生表 t
    left join 语文表 t1 on t.姓名 = t1.姓名
    left join 数学表 t2 on t.姓名 = t2.姓名
    left join 英语表 t3 on t.姓名 = t3.姓名
      

  6.   

    select t.姓名,
           isnull(t1.成绩,'V') 语文 ,
            isnull(t2.成绩,'V') 数学 ,
            isnull(t3.成绩,'V') 英语
    from 学生表 t
    left join 语文表 t1 on t.姓名 = t1.姓名
    left join 数学表 t2 on t.姓名 = t2.姓名
    left join 英语表 t3 on t.姓名 = t3.姓名
      

  7.   

    access数据库中多个JOIN好像不好使。
      

  8.   

    sele 学生表.*,语文表.成绩 as 语文 from 学生表 full join 语文表 on学生表.姓名=语文表.姓名 into cursor mytable1sele 学生表.*,数学表.成绩 as 数学 from 学生表 full join 数学表 on学生表.姓名=数学表.姓名 into cursor mytable2sele 学生表.*,英语表.成绩 as 英语 from 学生表 full join 英语表 on学生表.姓名=英语表.姓名 into cursor mytable3sele mytable1.*,mytable2.数学 from mytable1 full join mytable2 onmytable1.姓名=mytable2.姓名 into cursor mytable1_2sele mytable1_2.*,mytable3.英语 from mytable1_2 full join mytable3 onmytable1_2.姓名=mytable3.姓名 into dbf mytableuse mytable
    brow
      

  9.   

    sele 学生表.*,语文表.成绩 as 语文 from 学生表 full join 语文表 on 学生表.姓名=语文表.姓名 into cursor mytable1sele 学生表.*,数学表.成绩 as 数学 from 学生表 full join 数学表 on 学生表.姓名=数学表.姓名 into cursor mytable2sele 学生表.*,英语表.成绩 as 英语 from 学生表 full join 英语表 on 学生表.姓名=英语表.姓名 into cursor mytable3sele mytable1.*,mytable2.* from mytable1 full join mytable2 on mytable1.姓名=mytable2.姓名 into cursor mytable1_2sele mytable1_2.*,mytable3.* from mytable1_2 full join mytable3 on mytable1_2.姓名=mytable3.姓名 into dbf mytableuse mytable
    brow
      

  10.   

    结题:深受启发,总结如下:
    1 JOIN是FROM子句。因多个JOIN在access中不能连用,查了一下"HELP"才知道的。
    2 多个JOIN使用括号,如 FROM (((学生表 JOIN 语文 ON ...) JOIN 数学 ON ...)...)