现有三张表:
学生:id,姓名,年龄,体育_id,音乐_id体育: id,项目名,举办时间音乐: id,项目名,举办时间现要列出所有学生的信息,如果他参加了活动小组则列出其项目名称,形式如下:id,姓名,年龄,体育项目名,音乐项目名用ADOQuery控件,请问SQL语名怎么写? 另外,我用  " select id,姓名,年龄,体育.项目名 as  体育项目名,音乐.项目名 as 音乐项目名 from 学生  left join 体育 on 学生.体育_id=体育.id   left join 音乐 on 学生.音乐_id=音乐.id  "
   
   为什么总是说" left join 音乐 on 学生.音乐_id=音乐.id " 错误?
 

解决方案 »

  1.   

    select A.ID,A.姓名,A.年龄,B.项目名称,C.项目名称 from 学生 as A,体育 as B,音乐 as C where A.体育_ID=B.ID and A.音乐_id=C.ID
      

  2.   

    我要的是应该是左联结,但好像ACCESS 不支持两层 Left join ,语句 
       " select id,姓名,年龄,体育.项目名 as  体育项目名,音乐.项目名 as 音乐项目名 from 学生  left join 体育 on 学生.体育_id=体育.id   left join 音乐 on 学生.音乐_id=音乐.id  " 在SQLServer中不出错,但在ACCESS中就不行,楼上所说的方法不行,若一个学生没有参加任何小组,他的姓名和年龄等信息应该能显示出来只不过“体育项目名,音乐项目名”为空值。
      

  3.   

    在Access中好想不支持,哪就用一个比较麻烦的方法:
    再建一个表(Table_xs) id,姓名,年龄,体育_id,音乐_id,体育项目名,音乐项目名。
    Insert Table_xs set (id,姓名,年龄,体育_id,音乐_id)
    select id,姓名,年龄,体育_id,音乐_id from 学生。
    然后 再根据体育_id,音乐_id 来Update表;
    这样应该可以的。
      

  4.   

    qingke21(清柯) ____________所说的不行,我不可以因为查询就建表影响系统速度太大,我已经用一层的left join 做了"select id,姓名,年龄,体育.项目名 as  体育项目名,学生.音乐_id from 学生  left join 体育 on 学生.体育_id=体育.id " 至于音乐项目名我用另外一个ADOQuery查询用label显示了,将其动作放在了DBGrid1CellClick中凑合着解决了问题,但就是一层的left join ACCESS也不准我再加查询条件比如我想在已经检索出来的记录集中对体育项目的名称或学生的年龄进行再次检索,它就不让我给on 后面用AND写其它条件,好痛苦(还有连个视图也不准建立) ACCESS呀? ACCESS 你怎么这个样子??? 是我菜,还是你笨?