You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL:如何根据行号查询指定位置的表记录?

当然可以!不过不同数据库的实现语法不太一样,我给你整理了几个常用数据库的写法,你可以对照着用:

根据行号获取指定记录的实现方式

Oracle 数据库

你提到的ROWNUM确实是Oracle里的行号关键字,但直接写SELECT * FROM my_table WHERE ROWNUM = 27是拿不到结果的——因为ROWNUM是在查询返回结果的过程中逐行分配的,当它还没分配到27的时候,筛选条件就不满足,自然返回空。正确的写法是先给所有记录分配行号,再筛选:

SELECT *
FROM (
    SELECT t.*, ROWNUM AS rn
    FROM my_table t
)
WHERE rn = 27;

MySQL / MariaDB

这俩数据库用LIMIT子句就能轻松实现,语法很直观:

SELECT * FROM my_table LIMIT 26, 1;

这里要注意,LIMIT后面第一个数是偏移量(从0开始计数,第27条的偏移量就是26),第二个数是要获取的记录条数。

SQL Server

SQL Server有两种常用写法,你可以选适合自己的:

方法1:ROW_NUMBER()窗口函数

SELECT *
FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY 你的排序字段) AS rn
    FROM my_table
) AS sub_query
WHERE rn = 27;

重点提醒:这里必须指定ORDER BY,不然数据库返回的行顺序是随机的,行号也就没意义了。如果不需要特定排序,可以用ORDER BY (SELECT NULL)来占位。

方法2:OFFSET...FETCH(SQL Server 2012及以上版本)

这种写法更简洁:

SELECT * FROM my_table
ORDER BY 你的排序字段
OFFSET 26 ROWS FETCH NEXT 1 ROW ONLY;

PostgreSQL

PostgreSQL支持LIMIT + OFFSET的写法,和MySQL类似:

SELECT * FROM my_table LIMIT 1 OFFSET 26;

同样,也可以用ROW_NUMBER()窗口函数来实现,写法和SQL Server的方法1基本一致。

最后再啰嗦一句:不管用哪种写法,一定要记得加上明确的ORDER BY字段!如果没有排序规则,数据库返回的记录顺序是不确定的,你这次拿到的第27条,下次可能就变成别的记录了。

内容的提问来源于stack exchange,提问作者Daniel Bednář

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:23:05