首页 > 解决方案 > MySQL重新排序数字值

问题描述

我有一个包含值的表

ID(PK) MAIN_ID  SUB_ID
1         2        2
2         2        3
5         1        1
3         1        3
9         1        4
8         1        5
4         4        2
7         4        3
11        4        4
10        4        6
6         4        7
12        4        8

我想以这样的方式重新排序它们,MAIN_ID 将包含 1 、 2 、 3 、 4 和 SUB_ID 将容器 1 、 2 、 3 、 4 、 5 等。基本上我想删除丢失的数字并使 MAIN_ID 和 SUB_ID 跟随没有遗漏数字的数字顺序

要求的结果

ID(PK)  MAIN_ID           SUB_ID
1         2                1(Prev 2)
2         2                2(Prev 3)
5         1                1
3         1                2(Prev 3)
9         1                3(Prev 4)
8         1                4(Prev 5)
4         3(Prev 4)        1(Prev 2)
7         3(Prev 4)        2(Prev 3)
11        3(Prev 4)        3(Prev 4)
10        3(Prev 4)        4(Prev 6)
6         3(Prev 4)        5(Prev 7)
12        3(Prev 4)        6(Prev 8)
```

标签: mysqldatabase

解决方案


你需要这个:

UPDATE test
JOIN ( SELECT ID, 
              DENSE_RANK() OVER (ORDER BY MAIN_ID) dr,
              ROW_NUMBER() OVER (PARTITION BY MAIN_ID ORDER BY SUB_ID, ID) rn
       FROM test ) t USING (ID)
SET test.MAIN_ID = dr, test.SUB_ID = rn;

?

小提琴


推荐阅读