【问题标题】:Update column enumerating row number in MySQL 5.7在 MySQL 5.7 中更新列枚举行号
【发布时间】:2021-02-25 21:17:32
【问题描述】:

我在 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

我尝试采用this question 的上述内容,但它一直说“FROM 在此位置不是有效输入”。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你可以使用变量:

    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);
    

    很遗憾,当update 具有join 时,您不能使用order by

    【讨论】:

    • 之前没有考虑过变量的使用。非常感谢,这很有教育意义!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多