有4张表。
用户表
登陆id  密码  注册时间  权限
aa      **   20060201  1
bb      **   20060202  2
cc      **   20060203  2
dd      **   20060204  1用户登录表
登陆id   登陆时间
aa       20060301
cc       20060302
dd       20060302用户信息表
登陆id  姓名  性别 
aa      张三  男
cc      李四  女文章信息表
id   登陆id  标题  类别  发表时间
1    aa      呵呵  .net  20060302
2    aa      哈哈  java  20060303
3    cc      嘿嘿  .net  20060301
4    cc      asdf  .net  20060304我需要等到的结果是:
登陆id  姓名 性别 标题 类别 登陆时间 。
条件:满足用户表.权限=1 ,把用户表的所有用户都显示出来,不管是否发表文章、是否登陆过。
排序:order by 用户登录表.登陆时间 desc ,用户表.注册时间 desc
如:
登陆id  姓名 性别 标题 类别 登陆时间
aa      张三 男   哈哈 java 20060301
bb
cc      李四 女   asdf .net 20060302
dd                          20060302

解决方案 »

  1.   

    不懂.为什么
     1    aa      呵呵  .net  20060302 
    没有选出来?
      

  2.   

    select a.登陆id,b.姓名,b.性别,d.标题,d.类别,c.登陆时间
    from 用户表 a
    left join 用户信息表 b on a.登陆id=b.登陆id  
    left join (
    select 登陆id,max(登陆时间) as 登陆时间
    from 用户登录表
    group by 登陆id
    ) as c on a.登陆id=c.登陆id  
    left join (
    select *
    from 文章信息表 x
    where id=(select top 1 id from 文章信息表 where 登陆id=x.登陆id order by 发表时间)
    ) as d on a.登陆id=d.登陆id and a.权限=1
    order by c.登陆时间 desc ,d.注册时间 desc
      

  3.   

    select a.登陆id,b.姓名,b.性别,d.标题,d.类别,c.登陆时间
    from 用户表 a
    left join 用户信息表 b on a.登陆id=b.登陆id  
    left join (
    select 登陆id,max(登陆时间) as 登陆时间
    from 用户登录表
    group by 登陆id
    ) as c on a.登陆id=c.登陆id  
    left join (
    select *
    from 文章信息表 x
    where id=(select top 1 id from 文章信息表 where 登陆id=x.登陆id order by 发表时间 desc)
    ) as d on a.登陆id=d.登陆id                               --and a.权限=1
    order by c.登陆时间 desc ,d.注册时间 desc