MySQL分页语法报错求助:OFFSET位置无效问题排查
解决MySQL中的分页语法错误问题
嘿,我懂你遇到的麻烦了——MySQL并不支持你用的OFFSET ... FETCH FIRST ... ROW ONLY这种分页写法,这是SQL标准或者像SQL Server、PostgreSQL这类数据库的语法,MySQL有自己专属的分页关键字LIMIT。
修改后的完整查询语句
把原来的分页部分替换成MySQL支持的LIMIT语法就行,你写的OFFSET 0 FETCH FIRST 100 ROW ONLY完全等价于LIMIT 100 OFFSET 0(因为偏移0行可以简化成LIMIT 100),修改后的SQL如下:
SELECT b.co_curriculo, b.ds_nome_profissional AS nome, b.linkedin, a.co_shorlist, cao_cliente.no_fantasia, 0 as recursado FROM cao_curriculo_shortlist_cv a JOIN cao_curriculo b ON b.co_curriculo = a.co_curriculo JOIN cao_curriculo_shortlist ON cao_curriculo_shortlist.co_shortlist = a.co_shorlist JOIN cao_os_atividade ON cao_os_atividade.co_atividade = cao_curriculo_shortlist.co_atividade JOIN cao_usuario ON cao_usuario.co_usuario = cao_os_atividade.co_usuario JOIN cao_sistema ON cao_os_atividade.co_sistema = cao_sistema.co_sistema JOIN cao_cliente ON cao_cliente.co_cliente = cao_sistema.co_cliente WHERE b.linkedin != '' UNION SELECT co_recusa_entrevista AS co_curriculo, ds_nome_profissional AS nome, linkedin, cao_curriculo_recusa_entrevista.co_shortlist AS co_shorlist, cao_cliente.no_fantasia, 1 AS recursado FROM cao_curriculo_recusa_entrevista JOIN cao_curriculo_shortlist ON cao_curriculo_shortlist.co_shortlist = cao_curriculo_recusa_entrevista.co_shortlist JOIN cao_os_atividade ON cao_os_atividade.co_atividade = cao_curriculo_shortlist.co_atividade JOIN cao_usuario ON cao_usuario.co_usuario = cao_os_atividade.co_usuario JOIN cao_sistema ON cao_os_atividade.co_sistema = cao_sistema.co_sistema JOIN cao_cliente ON cao_cliente.co_cliente = cao_sistema.co_cliente WHERE linkedin != '' ORDER BY 2 desc LIMIT 100;
额外的语法说明
- 如果之后你需要跳过前N行再取100条数据,就用
LIMIT 100 OFFSET N的格式,比如跳过前200行取100条:LIMIT 100 OFFSET 200 - MySQL也支持简写形式
LIMIT N, M,其中N是偏移行数,M是要获取的行数,上面的例子也可以写成LIMIT 200, 100,不过LIMIT ... OFFSET ...的可读性会更好一些。
这样修改后,你的查询就能在MySQL Workbench里正常执行分页了,结果和你原本预期的一致~
内容的提问来源于stack exchange,提问作者MetalKaiser
相关产品推荐
相关产品推荐

