use database
SELECT *
FROM info a
WHERE bsort IN ('分类1', '分类2', '分类3', '分类4') AND bsort IN
    (SELECT TOP 3 bsort
   FROM bizinfo
   WHERE bsort =a.bsort
   ORDER BY id DESC)
order by id desc

解决方案 »

  1.   

    你后面的slect top 3 *改成select top 3 bsort!
    要不然bsort in (select top 3 * from...)怎么定位bsort对应哪一列呢??
      

  2.   

    use database
    SELECT *
    FROM info a
    WHERE bsort IN ('分类1', '分类2', '分类3', '分类4') AND bsort IN
        (SELECT TOP 3 bsort
       FROM bizinfo 
       WHERE bsort =a.bsort
       ORDER BY id DESC)
    order by id desc
      

  3.   

    谢谢 txlicenhe(马可)的回复!
    按上面改了后,返回所有的记录,而不是每个分类取3条记录,麻烦再看下哪有问题
      

  4.   

    我上面写错了,是在同一个表里查询的 bizinfo应写成info
      

  5.   

    use database
    SELECT *
    FROM info a
    WHERE bsort IN ('分类1', '分类2', '分类3', '分类4') AND bsort IN
        (SELECT TOP 3 bsort
       FROM bizinfo
       ORDER BY id DESC)
    order by id desc
      

  6.   

    use database
    SELECT *
    FROM info a
    WHERE bsort IN ('分类1', '分类2', '分类3', '分类4') AND bsort IN
        (SELECT TOP 3 bsort
       FROM info
       ORDER BY id DESC)
    order by id desc还是返回所有记录呀
      

  7.   

    或者是
    use database
    SELECT *
    FROM info a
    WHERE bsort IN ('分类1', '分类2', '分类3', '分类4') AND bsort IN
        (SELECT TOP 3 bsort
       FROM bizinfo
       where id=a.id
       ORDER BY id DESC)
    order by id desc
      

  8.   

    列 名       数据类型
     id            int     自动编号
    bsort         char     分类
     .
     .
     .
      

  9.   

    你应该把两个表info,bizinfo都列出来
      

  10.   

    是呀,上面的我写错了呀,发的时候改了一个表名,第二个没改,不好意思了。问题是语句执行返回所有记录呀 
    "AND bsort IN
        (SELECT TOP 3 bsort
       FROM bizinfo
       where id=a.id
       ORDER BY id DESC) "
    这些语句好像没执行呀,如何改呀,真是头痛的事.麻烦再看看呢 感谢!
      

  11.   

    按照你的意思,可以这么写
    use database
    go
    SELECT top 3 * FROM info WHERE bsort IN ('分类1')
    union all
    SELECT top 3 * FROM info WHERE bsort IN ('分类2')
    union all
    SELECT top 3 * FROM info WHERE bsort IN ('分类3')
    union all
    SELECT top 3 * FROM info WHERE bsort IN ('分类4')
      

  12.   

    我这样试过,不过主要还是 order by id desc 的问题
    用union只能在最后加上order by id desc用这种办法返回的并不是每个分类最新的3条记录。
      

  13.   

    use database
    GO
    SELECT *
    FROM info a
    WHERE bsort IN ('分类1', '分类2', '分类3', '分类4') AND id IN
        (SELECT TOP 3 id
       FROM info
       where bsort=a.bsort
       ORDER BY id DESC)
    order by id desc
      

  14.   

    use database
    GO
    SELECT *
    FROM info a
    WHERE bsort IN ('分类1', '分类2', '分类3', '分类4') AND id IN
        (SELECT TOP 3 id
       FROM info
       where bsort=a.bsort
       ORDER BY id DESC)
    order by id desc