Mysql SQL Replace语句的正确语法
在试图确定为什么我的SQL语句在我正在重构的节点代码中返回错误,以连接到MariaDB,而不是通过SQL Anywhere之后,我将其缩小为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
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
随着它的增长需要更长的时间,因为跳过这些行需要时间。