MariaDB 11.1.2自定义行号列报错问题及解决咨询
解决MariaDB 11.x中生成行号的语法错误问题
问题原因
在MariaDB 11.1.2中报错的核心原因是row_number已成为保留关键字(对应窗口函数ROW_NUMBER()),直接将其作为列别名使用会触发语法解析错误。而在MariaDB 10.5.8、MySQL 5.7等旧版本中,row_number尚未被列为严格保留关键字,因此可以正常运行。
可行解决方案
方案1:给row_number别名添加反引号转义
无论使用用户变量还是窗口函数,只需将别名用反引号包裹即可:
- 使用用户变量的写法:
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`;
方案2:更换非保留关键字的别名
放弃使用row_number作为别名,改用row_num、rn等非保留关键字:
- 用户变量写法:
SET @curRow=0; SELECT @curRow := @curRow + 1 AS row_num, `users`.`name` FROM `users`;
- 窗口函数写法:
SELECT ROW_NUMBER() OVER (ORDER BY users.id) AS row_num, `users`.`name` FROM `users`;
修正ChatGPT给出的子查询方案
原方案失败同样是因为未转义row_number别名,修改后即可正常运行:
SELECT `row_number`, name FROM ( SELECT @curRow := @curRow + 1 AS `row_number`, name FROM users, (SELECT @curRow := 0) r ) AS subquery_alias;
内容的提问来源于stack exchange,提问作者Shiro
相关产品推荐
相关产品推荐

