用户定义的变量作为别名 MySQL v8.0 不工作
User defined variable as alias MySQL v8.0 not working
以下查询(这是一个压缩形式)运行 可以,用户定义的变量在 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
以下查询(这是一个压缩形式)运行 可以,用户定义的变量在 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