日期:2014-05-19  浏览次数:20426 次

一个sql查询,请高手指教
张三         语文 81
张三         数学 75
李四         语文 76
李四         数学 90
王五         语文 81
王五         数学 100

我想显示语文和数学都大于80分的人的名字
因为本人SQL是弱项,总感觉自己写的这个感觉效率好低,用的笨方法
请问高手有没有别的方法

select   distinct   mingzi   from   students
where  
students.mingzi   in
(
select   mingzi   from   students   s1  
where   fenshu   > =   80   and   kecheng   =   '语文 '
)
and
students.mingzi   in
(
select   mingzi   from   students   s2
where   fenshu   > =   80   and   kecheng   =   '数学 '
)


------解决方案--------------------
select mingzhi from (select 姓名,mingzi from students where 分数> 80) a group by 姓名 having count(*)> 1
------解决方案--------------------

select mingzi from students s1
where fenshu > = 80 and (kecheng = '语文 ' or kecheng = '数学 ')

这样不行嘛?
------解决方案--------------------
select a.mingzi from
( select mingzi from students where fenshu > = 80 and kecheng = '语文 ') a
join
( select mingzi from students where fenshu > = 80 and kecheng = '数学 ') b
on a.mingzi=b.mingzi