Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL Replace语句的正确语法_Mysql_Sql_Mariadb_Sqlanywhere - Fatal编程技术网

Mysql SQL Replace语句的正确语法

Mysql SQL Replace语句的正确语法,mysql,sql,mariadb,sqlanywhere,Mysql,Sql,Mariadb,Sqlanywhere,在试图确定为什么我的SQL语句在我正在重构的节点代码中返回错误,以连接到MariaDB,而不是通过SQL Anywhere之后,我将其缩小为REPLACE语句,我们使用该语句计算要处理的记录数和要跳过的记录数 我的初始测试SQL SELECT语句如下所示: const sql = this.query.replace(/SELECT/i, `SELECT TOP ${recordsPerRun} START AT ${recordsProcessed + 1}`); 从ar.customers

在试图确定为什么我的SQL语句在我正在重构的节点代码中返回错误,以连接到MariaDB,而不是通过SQL Anywhere之后,我将其缩小为
REPLACE
语句,我们使用该语句计算要处理的记录数和要跳过的记录数

我的初始测试SQL SELECT语句如下所示:

const sql = this.query.replace(/SELECT/i, `SELECT TOP ${recordsPerRun} START AT ${recordsProcessed + 1}`);
从ar.customers中选择客户名称

然后,我们使用
REPLACE
语句来确定要处理多少条记录,以及要跳过多少条记录。当我们在任何地方使用SQL时,都是这样:

const sql = this.query.replace(/SELECT/i, `SELECT TOP ${recordsPerRun} START AT ${recordsProcessed + 1}`);
这种语法需要更改,因为MariaDB使用“LIMIT”而不是“TOP”。据我所知,第一个参数是要跳过的记录数,第二个参数是要返回的记录数

所以,在我的情况下,应该是这样的:

限制${recordsProcessed},${RecordsPerun}


但是,我不能完全正确地理解完整的语法。如何编写此
REPLACE
语句,使其与上面的初始测试SQL SELECT语句配合使用?这似乎很难做到,因为在MariaDB中,LIMIT现在位于查询的末尾,而不是像MySQL那样位于查询的开头。

LIMIT
位于查询的末尾,因此没有什么可替换的,只需将它连接起来:

const sql = this.query + ` LIMIT ${recordsProcessed}, ${recordsPerRun}`;
或者将其合并到模板中:

const sql = `${this.query} LIMIT ${recordsProcessed}, ${recordsPerRun}`;

是的,当然,这是有道理的。非常感谢,@Barmar!请注意,
OFFSET
随着它的增长需要更长的时间,因为跳过这些行需要时间。