MySQL 中用于插入的 ROW_NUMBER() 等效项[重复]

Posted

技术标签:

【中文标题】MySQL 中用于插入的 ROW_NUMBER() 等效项[重复]【英文标题】:ROW_NUMBER() equivalent in MySQL for inserting [duplicate] 【发布时间】:2012-08-11 10:11:20 【问题描述】:

我正在尝试将在 Microsoft SQL Server 中创建的 SQL 脚本转换为可以在 SQL 过程中使用的脚本,以便使用链接服务器运行,我正在使用的脚本

ROW_NUMBER() OVER(ORDER BY [FIELDS])

要创建不依赖于自动增量的主键,当我尝试将代码另存为过程时出现此错误

ERROR 1064 (42000):您的 SQL 语法有错误:请查看与您的 mysql 服务器版本相对应的手册,以获取正确的语法,以便在 [LINENO] 行的“(ORDER BY [FIELDS])”附近使用/p>

显然错误是说 ROW_NUMBER OVER 不正确,因为我删除了 OVER 位并收到错误说 ROW_NUMBER 未定义

在我搜索的所有地方,除了人们为 SELECT 语句而不是 INSERT 语句询问这个问题外,我什么也没得到创建与 ROW_NUMBER() 在 Microsoft Server 中相同的数据

【问题讨论】:

表示OVER 函数的参数无效。 @ColeJohnson: OVER 无论如何不在 MySQL 中,我通过在 Google 中搜索它进行了检查,并且只获得了指向 MSDN 的链接,即使参数是正确的,它也可能会给出与 ROW_NUMBER 相同的消息或两个函数之间的语法错误......是的,脚本在 Microsoft SQL Server 中工作,因为我在其中运行它,因为它只使用链接服务器,我通过将其从使用中移出来使脚本运行得更好实际在服务器本身中使用的链接服务器 我正在尝试将行号插入表中,我不能使用 INSERT INTO [TABLE] VALUES(@rank+1) 因为每次只会让我得到 1,即不允许主键,我试过@row += 1 【参考方案1】:

不幸的是,在 MySQL 中没有 ROW_NUMBER() 等价物,但您仍然可以通过创建一个简单的变量来模拟它,该变量包含一个值,每行递增。

例子:

SET @rank=0;
SELECT   @rank := @rank+1 AS rank, fruit, amount
FROM     sales
ORDER BY amount DESC;
SQLFiddle Demo

【讨论】:

它没有返回像 1,2,3... 这样的行号。它返回 1,2,9,11... 这不是我想要的

以上是关于MySQL 中用于插入的 ROW_NUMBER() 等效项[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Mysql8.0出现的窗口函数row_number(),rank(),dense_rank()用于排序的查询

MySQL实现SQL Server排名函数

MySQL实现SQL Server排名函数

MySQL 中的 ROW_NUMBER()

mysql窗口函数rank() over、dense_rank() over、row_number() over 使用心得

mysql 怎么才能做到rownumber序号