表 A 
   AID  NAME   AGE
    1   aaa    18
    2   bbb    17
    3   ccc    16表 B
  BID  AID  Subject Mark
   1    1     语文    97
   2    1     数学    99
   3    2     数学    88
想得到结果   AID    NAME   AGE  BID
    1     aaa    18   1
    2     bbb    17   3
    3     ccc    16   null说明: 期望结果,我将根据BID是否为null来判断此生是否参加了考试(考试了1科及以上为参加了考试,否则为NULL)
              所以结果中的BID是几并不要求,要求的是不为null,如 对于aaa  结果BID可以为1,也可以为2,
              因为他即参加了语文考试,又参加了数学考试,只要BID不为null就说明他参加了考试试验: select a.*,b.bid from a left outer join b on a.aid = b.aid
结果
      AID  NAME  AGE  BID
      1    aaa   18   1
      1    aaa   18   2
      2    bbb   17   3
      3    ccc   16   null
      不符合要求,因为 aaa重复记录..在线等结帖~~~~~`

解决方案 »

  1.   

    use tempdb
    GOcreate table A(AID int, NAME varchar(10), AGE int)
    insert A
    select 1, 'aaa', 18
    union all select 2, 'bbb', 17
    union all select 3, 'ccc', 16create table B(BID int, AID int, Subject varchar(20), Mark float)
    insert B
    select 1,1,'Language Arts', 97
    union all select 2, 1, 'Mathematics', 99
    union all select 3, 2, 'Mathematics', 88select A.*, BB.BID
    from A 
    left join (SELECT count(BID) as BID, AID FROM B GROUP BY AID) AS BB ON A.AID = BB.AIDdrop table A
    drop table B
    AID         NAME       AGE         BID
    ----------- ---------- ----------- -----------
    1           aaa        18          2
    2           bbb        17          1
    3           ccc        16          NULL
      

  2.   

    select A.AID, NAME, AGE, BID
    from A left join (select AID, BID=min(BID) from B group by AID) B on A.AID=B.AID
      

  3.   

    create table A(AID int, NAME varchar(10), AGE int)
    insert A
    select 1, 'aaa', 18
    union all select 2, 'bbb', 17
    union all select 3, 'ccc', 16create table B(BID int, AID int, Subject varchar(20), Mark float)
    insert B
    select 1,1,'Language Arts', 97
    union all select 2, 1, 'Mathematics', 99
    union all select 3, 2, 'Mathematics', 88select A.AID, NAME, AGE, BID
    from A left join (select AID, BID=min(BID) from B group by AID) B on A.AID=B.AIDdrop table A
    drop table B/*
            AID NAME               AGE         BID
    ----------- ---------- ----------- -----------
              1 aaa                 18           1
              2 bbb                 17           3
              3 ccc                 16        NULL(3 row(s) affected)
    */