主表A两字段:UserID<主键,int自增长>,UserName和从表B ActionId<PK,自增长>,UserId<FK>, Action_beginDate, Action_EndDate 。 主表A往B表里插入数据(一对多:即表A的任一用户均可往B表插入多条数据.)
   现在想要的结果:表A所有不重复用户的操作记录结果集.(注:如果A表的任一用户在表B里有多条,只要得到最后插入的一条即可.没有往B表里插入数据的用户也要显示出来。另外:Action_beginDate、Action_EndDate 都是日期型.且在表B里可能为空[IS NULL].).
        请教SQL 如何写呢(性能好点)?

解决方案 »

  1.   


    select UserId,ActionId=Max(ActionId)
    into #tmp
    from 表B
    group by UserIdselect t1.UserID,t1.UserName,t3.ActionId,t3.Action_beginDate,t3.
    from 表A t1 left join #tmp t2 on t1.UserId=t2.UserIdAction_EndDate
    left join 表B t3 on left join t2.ActionId=t3.ActionId
      

  2.   

    select * from a left join b 
    on a.userid=b.userid
    and not exists 
    (select 1 from b as tb 
     where tb.UserId=b.UserId 
     and tb.ActionId>b.ActionId)