SQL Server分页查询

2024-04-06

呃呃呃!我已经为此苦苦挣扎了很长时间!我可以用 MySQL 轻松做到这一点,但用 SQL Server 就不行:(

这是应该连接在一起的简化表格。

通过使用内连接语法将所有这些组合起来,我必须编写一个查询以用于将来的分页(顺便说一句,PHP)。假设我需要所有 ID、姓名和日期信息,其中一张照片是在 2012 年 10 月 1 日到 2012 年 10 月 30 日之间拍摄的......并且每页 20 人。

实现这里目标的最简单的查询是什么? (我尝试过“NOT IN”……但它太麻烦了,因为我不习惯“NOT IN”东西……)

您可以忽略性能速度。

谢谢你!


这就是我在 SQL Server 2005+ 中的做法:

SELECT ID, Name, Photo, CreatedDate, rowNum, (rowNum / 20) + 1 as pageNum
FROM (
    SELECT a.ID, a.Name, b.Photo, c.Created_Date
       , Row_Number() OVER (ORDER BY c.Created_Date ASC) as rowNum
    FROM a
       JOIN b ON a.ID = b.ID
       JOIN c ON c.photo = b.photo
    WHERE c.Created_Date BETWEEN '2012-01-1' AND '2012-10-30'
) x
WHERE (rowNum / 20) + 1 = 1

请注意,我使用了一些整数除法来计算页码。

不幸的是,由于 2005 年之前没有 row_number(),我将使用带有标识列的中间表:

    SELECT a.ID, a.Name, b.Photo, c.Created_Date
       , identity(int,1,1) as rowNum
    INTO t
    FROM a
       JOIN b ON a.ID = b.ID
       JOIN c ON c.photo = b.photo
    WHERE c.Created_Date BETWEEN '2012-01-1' AND '2012-10-30'
    ORDER BY c.Created_Date ASC
    GO

    ALTER TABLE t ADD pageNum AS rowNum / 20
    GO

    SELECT ID, Name, Photo, Created_Date, rowNum
    FROM t
    WHERE pageNum = 1 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server分页查询 的相关文章

随机推荐