表 AAID                  NAME   
10002031        张三
22300998        李四
31232132        王五
 
表B
BID     AID                            PROJECT        SCORE  
1         10002031                    铅球              50
2         10002031                    铁饼              60
3          22300998                    铅球             70
查询出 所有 SCORE  都在60分以上的人现在这样写的:select * from 表A
inner join  表B  on 表A.AID = 表B.AID
where 表B.SCORE  > 60     这样的结果是 只要有一个项目是大于60分就查出来,要求是查出所有项目都是60分以上的人(只要有一个项目小于60就不查出来)。

解决方案 »

  1.   

    select a.* from a where aid not in
    (select distinct AID from b where SCORE < 60)
      

  2.   

    select 表A.AID,表A.NAME from 表A
    inner join 表B on 表A.AID = 表B.AID
    group by  表A.AID,表A.NAME  having min(B.SCORE)>60
      

  3.   

    create table A(AID varchar(10) , NAME varchar(10))
    insert into a values('10002031', '张三')
    insert into a values('22300998', '李四')
    insert into a values('31232132', '王五')
    create table B(BID int,AID varchar(10),PROJECT varchar(10),SCORE int)
    insert into b values(1 ,'10002031', '铅球', 50)
    insert into b values(2 ,'10002031', '铁饼', 60)
    insert into b values(3 ,'22300998', '铅球', 70)
    goselect a.* from a where aid not in (select distinct AID from b where SCORE < 60)
    /*
    AID        NAME       
    ---------- ---------- 
    22300998   李四
    31232132   王五(所影响的行数为 2 行)
    */select a.* from a 
    where aid in (select distinct AID from b) and
    aid not in (select distinct AID from b where SCORE < 60)
    /*
    AID        NAME       
    ---------- ---------- 
    22300998   李四(所影响的行数为 1 行)
    */select distinct a.* from a , b
    where a.AID = b.AID and
    a.aid not in (select distinct AID from b where SCORE < 60)
    /*
    AID        NAME       
    ---------- ---------- 
    22300998   李四(所影响的行数为 1 行)
    */drop table a , b
      

  4.   

    select a.* from a where aid in(select distinct AID from b) and aid not in (select distinct AID from b where SCORE < 60)