如何更新与行号相关的列

Mok*_*Akh 5 mysql mariadb

有什么简单的方法可以按行号而不是 PK 更新列:

UPDATE contact m
SET    ContactNumber = sub.rn + 500
FROM  (SELECT Id, row_number() OVER (ORDER BY Id) AS rn FROM contact) sub
WHERE  m.Id = sub.Id;
Run Code Online (Sandbox Code Playgroud)

Aki*_*ina 9

UPDATE contact
SET ContactNumber = (@rownum := 1 + @rownum) + 500
WHERE 0 = (@rownum:=0)
-- for a given client, for example, Client_Id=123, use
-- WHERE Client_Id = 123 + (@rownum:=0)
ORDER BY id;
Run Code Online (Sandbox Code Playgroud)


ype*_*eᵀᴹ 5

UPDATE在 MySQL 和 MariaDB 中使用连接的语法是: UPDATE a JOIN b ON ... SET ... WHERE ... ;. 您使用的语法UPDATE .. SET ... FROM ... WHERE ... ;在 SQL Server 中使用。

对于具有窗口/排名功能的最新版本的 MariaDB,以下内容将起作用:

UPDATE
    contact AS m
  JOIN
    ( SELECT Id, row_number() OVER (ORDER BY Id) AS rn 
      FROM contact
    ) AS sub
  ON  m.Id = sub.Id
SET
    m.ContactNumber = sub.rn + 500
 ;
Run Code Online (Sandbox Code Playgroud)

dbfiddle.uk 中测试