更正 SQL 替换语句的 MariaDB 语法

Correct MariaDB Syntax for SQL Replace Statement

在尝试确定为什么我的 SQL 语句在节点代码中 return 出现错误后,我正在重构以连接到 MariaDB 而不是通过 SQL Anywhere,我缩小了范围它归结为我们用来计算要处理多少记录以及要跳过多少记录的 REPLACE 语句。

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

SELECT customer_name FROM ar.customers

然后我们使用 REPLACE 语句来确定要处理的记录数,以及要跳过的记录数。当我们使用 SQL Anywhere 时,看起来像这样:

const sql = this.query.replace(/SELECT/i, `SELECT TOP ${recordsPerRun} START AT ${recordsProcessed + 1}`);

该语法需要更改,因为 MariaDB 使用 "LIMIT" 而不是 "TOP"。根据我的理解,第一个参数是要跳过的记录数,第二个参数是 return 的记录数。

因此,就我而言,它类似于:

LIMIT ${recordsProcessed}, ${recordsPerRun}

但是,我不太理解完整的语法。我如何以一种可以与上面的初始测试 SQL SELECT 语句一起使用的方式编写此 REPLACE 语句?这似乎很难做到,因为在 MariaDB 中 LIMIT 现在出现在查询的末尾,而不是在开头,就像 TOP 对 MySQL 所做的那样。

LIMIT在最后,所以没有什么可替换的,只是连接它:

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

或合并到模板中:

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