求一SQL语句,,是一道面试题,自已想了一下午,求解!
学生表 
 学生ID      学生姓名     
 科目表 
 科目ID      科目名称     
 成绩表 
 ID      学生ID      科目ID      成绩     
 成绩表中存的是已考试的所有学生所有科目的成绩   
 求未参加考试的学生,和他们未考的科目,(也就是成绩表中没有的学生和没有的科目)如下:   
 学生姓名   未考科目名称
------解决方案--------------------select * 
 from 学生表 a 
 left join 科目表 b on 1=1 
 left join 成绩表 c on a.学生ID = c.学生ID and b.科目ID = c.科目ID 
 where c.id is null 
------解决方案--------------------select 学生表.学生姓名 , 科目表.科目名称  
 from 学生表 cross join 科目表  
 where cast(学生表.学生姓名 as varchar) + cast(科目表.科目名称 as varchar)  
 not in 
 (   
   select cast(学生表.学生姓名 as varchar) + cast(科目表.科目名称 as varchar)  
   from 学生表,科目表,成绩表 
   where 成绩表.学生ID = 学生表.学生ID and 成绩表.科目ID = 科目表.科目ID 
 )
------解决方案----------------------有点小错 
 select * 
 from 学生表 a 
 cross join 科目表 b  
 left join 成绩表 c on a.学生ID = c.学生ID and b.科目ID = c.科目ID 
 where c.id is null 
------解决方案--------------------cast(学生表.学生姓名 as varchar) + cast(科目表.科目名称 as varchar)    
 这种写法不健壮   
  'ab '+ 'cd ' =  'a ' +  'bcd '
------解决方案--------------------根据楼上的数据 
 select d.stname,e.suname  from student a cross join subject b left join grade c on a.stid=c.stid and b.suid=c.suid left join student d on a.stid=d.stid  
 left join subject e on b.suid=e.suid where grade is null