簡體   English   中英

在 MySQL 5.7 中更新列枚舉行號

[英]Update column enumerating row number in MySQL 5.7

我被困在 MySQL 5.7 中的查詢中。 簡化,我有一個像這樣的臨時表:

guid  B   C
 2   aa  55
 5   ab  66
 7   ac  77
 9   ad  88

我想要做的是,將列 guid 轉換為從 1 開始的枚舉,同時不觸及其他列中的任何數據:

guid  B   C
 1   aa  55
 2   ab  66
 3   ac  77
 4   ad  88

我一直在尋找涉及 ROW_NUMBER 和 ROW_ID 的解決方案,但我的語法將不被接受:

UPDATE temp_table
SET temp_table.guid = temp_table.New_guid
FROM (
      SELECT guid, ROW_NUMBER() OVER (ORDER BY [guid]) AS New_guid
      FROM temp_table
      ) x

我試圖從這個問題中采用上述內容,但它一直說“FROM 在這個位置不是有效輸入”。

您可以使用變量:

set @rn = 0;

update temp_table
    set guid = (@rn := @rn + 1)
    order by guid;

如果您實際上並不關心當前的順序,您可以使用:

update temp_table tt cross join
       (select @rn := 0) params
    set tt.guid = (@rn := @rn + 1);

不幸的是,當updatejoin時,您不能使用order by

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM