微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决用户定义的变量作为别名 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。