别名为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中的一个保留关键字,如这里所述。

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

另一种选择是使用反勾号,我认为随着更多关键字的保留,这种反勾号更经得起未来的考验,它将防止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=97b2c82bac1c4c2f5008ae5f8298e04

最新更新