用户定义的变量作为别名 MySQL v8.0 不起作用

问题描述

以下查询这是一个精简形式)运行良好,用户定义的变量被选为 MysqL v5.6.20 上的别名,但在 MysqL v8.0.23 上中断了

SELECT *,@rank := @rank + 1 AS rank
        FROM q39wg_comments;

错误

ERROR 1064 (42000): You have an error in your sql Syntax; check the manual that corresponds to your MysqL server version for the right Syntax to use near 'rank

解决方法

所以我终于想通了,这是因为 rank 现在是 MySQL 8.x.x 中的保留关键字,如 here 所述。

一旦我更新了变量名称,查询就开始工作了。

另一种选择是使用反引号,我认为随着更多关键字被保留,我认为这更有利于未来的证明,它将防止您的 SQL 不必要地中断。例如。以下在 MySQL v8.x.x 上运行良好

例如:

SELECT *,@rank := @rank + 1 AS `rank`
FROM q29wg_jreviews_comments ;
,

你必须初始化@rank

试试这个:

SELECT *,@rank := @rank + 1 AS myrank
FROM q39wg_comments
JOIN ( SELECT @rank:=0 ) AS init;

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=97b2c82bac1c4c2f5008a6e5f8298e04