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

如何通过非键列查询并指定选取第N行的SQL语句?

解决方案

根据你使用的数据库类型,以下是获取第N行数据的SQL写法:

SQL Server(匹配你当前语句的语法)

方法1:适用于SQL Server 2012及以上版本

使用OFFSET/FETCH语法直接指定跳过的行数和目标行数:

SELECT * 
FROM [<dbname>].[dbo].[<tablename>] 
WHERE [<Column name I want to search>] = 'Search term'
ORDER BY [<Key>]  -- 必须指定排序字段,确保行顺序固定
OFFSET (@N - 1) ROWS FETCH NEXT 1 ROW ONLY;

将@N替换为你要获取的行号(比如取第2行就传2,语句会自动跳过前1行取目标行)。

方法2:适用于SQL Server 2008及以下版本

用ROW_NUMBER()函数给结果行编号,再筛选目标行:

SELECT *
FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY [<Key>]) AS RowNum
    FROM [<dbname>].[dbo].[<tablename>] 
    WHERE [<Column name I want to search>] = 'Search term'
) AS TempResult
WHERE RowNum = @N;

MySQL

使用LIMIT子句指定偏移量和行数:

SELECT * 
FROM `<dbname>`.`<tablename>` 
WHERE `<Column name I want to search>` = 'Search term'
ORDER BY `<Key>`
LIMIT @N-1, 1;

第一个参数是偏移量(要获取第N行需跳过前N-1行),第二个参数表示只取1行。

PostgreSQL

通过OFFSET和LIMIT组合实现:

SELECT * 
FROM "<dbname>"."<tablename>" 
WHERE "<Column name I want to search>" = 'Search term'
ORDER BY "<Key>"
OFFSET @N-1 LIMIT 1;

关键注意事项

  • 必须加ORDER BY:不指定排序规则的话,数据库返回的行顺序可能随机变化,导致取到非预期行,建议用主键字段作为排序依据。
  • 避免SQL注入:不要直接把@N或搜索词拼接到SQL字符串中,优先用第三方软件支持的参数化方式传递变量。
  • 校验行号范围:利用你已能获取的总行数,先判断N是否在1到总行数之间,避免执行无效查询。

内容的提问来源于stack exchange,提问作者Rispiny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:10:26