试图 return 数据库行号的语法错误
Syntax Error trying to return row number from database
SELECT ROW_NUMBER()OVER(ORDER BY id), x, y, id
FROM coordonnees
ORDER BY id
我正在尝试 return 每行的行号(名为 coordonnees
的 table 有 3 列:id
、x
、 y
), 但此代码不起作用
错误是:
Syntax error near '(ORDER BY id), x, y, id
在数据库上:MYSQL 5.7.9
显然,MySQL 5.7 不支持 ROW_NUMBER()
。但是,我发现了一个新颖的解决方案,可以在 this site.
上模拟它
SELECT @row_num := IF(@prev_value=c.id,@row_num+1,1) AS RowNumber
,c.x
,c.y
,c.id
,@prev_value := c.id
FROM coordonnees c,
(SELECT @row_num := 1) x,
(SELECT @prev_value := -1) y
ORDER BY c.id
不过有一些注意事项:
- 必须在
@prev_value
变量之前设置 @row_num
变量。
ORDER BY
中的第一个字段必须是您作为分区依据的字段。
- 分配给
@prev_value
变量的默认值不能存在于字段分区中。
SELECT ROW_NUMBER()OVER(ORDER BY id), x, y, id
FROM coordonnees
ORDER BY id
我正在尝试 return 每行的行号(名为 coordonnees
的 table 有 3 列:id
、x
、 y
), 但此代码不起作用
错误是:
Syntax error near '(ORDER BY id), x, y, id
在数据库上:MYSQL 5.7.9
显然,MySQL 5.7 不支持 ROW_NUMBER()
。但是,我发现了一个新颖的解决方案,可以在 this site.
SELECT @row_num := IF(@prev_value=c.id,@row_num+1,1) AS RowNumber
,c.x
,c.y
,c.id
,@prev_value := c.id
FROM coordonnees c,
(SELECT @row_num := 1) x,
(SELECT @prev_value := -1) y
ORDER BY c.id
不过有一些注意事项:
- 必须在
@prev_value
变量之前设置@row_num
变量。 ORDER BY
中的第一个字段必须是您作为分区依据的字段。- 分配给
@prev_value
变量的默认值不能存在于字段分区中。