带有获取下一行的 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 Runselect @@Version
我在 ssms 2014 中使用这个偏移量获取。它对我来说工作正常,但是当我使用这个 where 子句像 '%gg%' 时,事情不工作【参考方案2】:
您不能对 SELECT * 执行聚合函数,您必须在 SELECT 子句中指定列的名称或在 WHERE 子句 table_name.shemaname.columnname 中指定完全限定名称
【讨论】:
以上是关于带有获取下一行的 Where 子句的主要内容,如果未能解决你的问题,请参考以下文章
MySQL:使用带有 WHERE 子句的 JOINS 从一个表中获取所有记录并从另一个表中获取可用记录