是这样的,在数据库中有两张表,一个是用户表(user)[id, name,...], 一个是用户状态表(user_state)[id, userid, userstate, statedesc, updatetime]。现在我要查询用户列表,用户列表要包含用户名、用户状态、状态说明、状态更新时间这些个字段。在用户状态表中,一个用户可能有多个状态记录,但只有这个用户最后(也就是最近)的一条状态记录是有效的,并且在每一行中要返回的(其他已过期的状态不显示)。另外用户状态表中可能没有对应某一用户的状态信息,这时候要返回默认值为1。请教各位高手,怎样来写这个SQL语句呢?我想到了用SELECT子句中用子查询,例如 SELECT (SELECT userstate FROM user_state WHERE userid = user.id ORDER BY updatetime desc limit 1) AS userstate, user.* FROM user  但是这样写只能返回userstate,不能一并返回statedesc和updatetime。

解决方案 »

  1.   

    参考下贴中的多种方法 (N=1)http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
    [征集]分组取最大N条记录方法征集,及散分....
      

  2.   

    select *
    from (
    select *
    from user,user_state
    where user_state.userid = user.id
    order by user.id,updatetime desc
    ) t
    group by user.id
      

  3.   

    select *
    from user a inner join user_state b on a.id=b.userid
    where not exists (select 1 from user_state where userid=b.userid and updatetime>b.updatetime)