下面两个 sql 在 MariaDB 10.5.8 和 MySQL 5.7 上运行良好
SET @curRow=0;
select @curRow := @curRow + 1 AS row_number, `users`.`name` from `users`
或者
select ROW_NUMBER() OVER (ORDER BY users.id) AS row_number, `users`.`name` from `users`
但是当我在 MariaDB 11.1.2 中运行时,它会抛出错误:查询 1 错误:您的 SQL 语法中有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解在 'row_number, 附近使用的正确语法users
。name
从users
第 1 行开始
我检查了 ChatGPT 3.5 它建议我
SELECT row_number FROM (
SELECT @curRow := @curRow + 1 AS row_number, name
FROM users, (SELECT @curRow := 0) r
) AS subquery_alias
您遇到的错误是因为您无法使用用户定义的变量直接在 SELECT 子句中生成行号,然后在 MariaDB 中的同一 SELECT 子句中引用它。相反,您应该使用子查询或公用表表达式 (CTE) 来实现此目的。以下是如何使用子查询重写查询。
但它不起作用。那么在 MariaDB 11 中该怎么做呢?