带有获取下一行的 Where 子句

Posted

技术标签:

【中文标题】带有获取下一行的 Where 子句【英文标题】:Where clause with fetch next row 【发布时间】:2016-02-03 12:05:22 【问题描述】:

如何在 sql 查询中使用 where 子句和 fetch next。我的查询结束于:

 10 ROWS FETCH NEXT 5 ROWS ONLY WHERE table.FullName LIKE '%name%' 

在 where 子句中出现错误。

error message

关键字“WHERE”附近的语法不正确

编辑:

select * 
from table name  
WHERE FullName LIKE '%name%' 
ORDER BY FullName 
OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY

当我删除语句'OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY'时查询将起作用

【问题讨论】:

关键字“WHERE”附近的语法不正确。这是错误 select * from table name WHERE FullName LIKE '%name%' ORDER BY FullName OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY 【参考方案1】:

您可能有错误的子句顺序,您需要先对结果进行排序以获得稳定的结果集:

SELECT *
FROM ...
WHERE table.FullName LIKE '%name%'
ORDER BY ...
OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY

LiveDemo

请记住,%phrase%非 SARGable 并且查询对于大表的性能很差。

OFFSET FETCH 仅适用于 SQL Server 2012+

【讨论】:

我试过这个得到错误,比如在 FETCH 语句中使用了选项 NEXT 无效。实际上正在获取 5 行,但我的搜索结果只有一个值。 @Youv SQL Server 版本? 如果搜索结果 (no:of records) 小于 5,查询是否有效? @Youv Run select @@Version 我在 ssms 2014 中使用这个偏移量获取。它对我来说工作正常,但是当我使用这个 where 子句像 '%gg%' 时,事情不工作【参考方案2】:

您不能对 SELECT * 执行聚合函数,您必须在 SELECT 子句中指定列的名称或在 WHERE 子句 table_name.shemaname.columnname 中指定完全限定名称

【讨论】:

以上是关于带有获取下一行的 Where 子句的主要内容,如果未能解决你的问题,请参考以下文章

如何从带有 where 子句的列表中获取数据到另一个列表?

MySQL:使用带有 WHERE 子句的 JOINS 从一个表中获取所有记录并从另一个表中获取可用记录

如果where子句在SQL中有重复的条件值,如何获取多行

2 带有 WHERE 子句的表连接

使用内连接,左外连接,交叉应用获取语法错误与 Where 子句

如何在带有 select 语句的 where 子句中使用比较运算符?