select
    b.contentid,
    b.tilte,
    a.sortname,
    a.sortid
from
    contentsort a
inner join
    msgcontent  b
on
    a.sortid = b.sortid
where
    b.contentid in(select 
                       top 5 contentid 
                   from 
                       msgcontent 
                   where 
                       sortid=b.sortid)

解决方案 »

  1.   

    --生成测试数据
    create table contentsort(sortid int,sortname varchar(20))
    insert into contentsort select 2 ,rtrim('商业报道')
    insert into contentsort select 8 ,rtrim('第四类  ')
    insert into contentsort select 9 ,rtrim('职场风云') 
    insert into contentsort select 12,rtrim('第三类  ')
    insert into contentsort select 14,rtrim('第二类  ')
    insert into contentsort select 16,rtrim('第一类  ')
    insert into contentsort select 20,rtrim('热点透视') 
    insert into contentsort select 21,rtrim('宏观行业')
    insert into contentsort select 22,rtrim('综合资讯') 
    insert into contentsort select 23,rtrim('政策法规') 
    create table msgcontent(contentid int,title varchar(20),sortid int)
    insert into msgcontent select 2 ,rtrim('热点透视文单1'),20
    insert into msgcontent select 3 ,rtrim('热点透视文单2'),20
    insert into msgcontent select 5 ,rtrim('热点透视文单3'),20
    insert into msgcontent select 6 ,rtrim('行业信息一类1'),16
    insert into msgcontent select 7 ,rtrim('行业信息一类2'),16
    insert into msgcontent select 8 ,rtrim('行业信息一类3'),16
    insert into msgcontent select 9 ,rtrim('行业信息二类1'),14
    insert into msgcontent select 10,rtrim('商业报到1    '),2
    insert into msgcontent select 11,rtrim('商业报到2    '),2
    insert into msgcontent select 12,rtrim('职场风云1    '),9
    insert into msgcontent select 13,rtrim('职场风云3    '),9
    insert into msgcontent select 14,rtrim('职场风云2    '),9
    insert into msgcontent select 15,rtrim('宏观行业1    '),21
    insert into msgcontent select 16,rtrim('宏观行业2    '),21
    insert into msgcontent select 17,rtrim('宏观行业3    '),21
    insert into msgcontent select 18,rtrim('商业报到3    '),2
    insert into msgcontent select 19,rtrim('热点透视文单1'),20
    insert into msgcontent select 20,rtrim('热点透视文单2'),20
    insert into msgcontent select 21,rtrim('热点透视文单3'),20
    insert into msgcontent select 22,rtrim('行业信息一类1'),16
    insert into msgcontent select 23,rtrim('行业信息一类2'),16
    insert into msgcontent select 24,rtrim('行业信息一类3'),16
    insert into msgcontent select 25,rtrim('行业信息二类1'),14
    insert into msgcontent select 26,rtrim('商业报到1    '),2
    insert into msgcontent select 27,rtrim('商业报到2    '),2
    insert into msgcontent select 28,rtrim('职场风云1    '),9
    insert into msgcontent select 29,rtrim('职场风云3    '),9
    insert into msgcontent select 30,rtrim('职场风云2    '),9
    insert into msgcontent select 31,rtrim('宏观行业1    '),21--执行查询
    select
        b.contentid,
        b.title,
        a.sortname,
        a.sortid
    from
        contentsort a
    inner join
        msgcontent  b
    on
        a.sortid = b.sortid
    where
        b.contentid in(select 
                           top 5 contentid 
                       from 
                           msgcontent 
                       where 
                           sortid=b.sortid)
    --输出结果
    contentid  title            sortname    sortid
    ---------  --------------   ---------   ------
    10         商业报到1        商业报道    2
    11         商业报到2        商业报道    2
    18         商业报到3        商业报道    2
    26         商业报到1        商业报道    2
    27         商业报到2        商业报道    2
    12         职场风云1        职场风云    9
    13         职场风云3        职场风云    9
    14         职场风云2        职场风云    9
    28         职场风云1        职场风云    9
    29         职场风云3        职场风云    9
    9          行业信息二类1    第二类      14
    25         行业信息二类1    第二类      14
    6          行业信息一类1    第一类      16
    7          行业信息一类2    第一类      16
    8          行业信息一类3    第一类      16
    22         行业信息一类1    第一类      16
    23         行业信息一类2    第一类      16
    2          热点透视文单1    热点透视    20
    3          热点透视文单2    热点透视    20
    5          热点透视文单3    热点透视    20
    19         热点透视文单1    热点透视    20
    20         热点透视文单2    热点透视    20
    15         宏观行业1        宏观行业    21
    16         宏观行业2        宏观行业    21
    17         宏观行业3        宏观行业    21
    31         宏观行业1        宏观行业    21
      

  2.   

    to :libin_ftsafe(子陌红尘)多谢,指教,您的方法可以实现但用 in(select ...)会不会有效率的问题? 效率会不会非常低?
      

  3.   

    假设 msgcontent 是海量数据的话??