mysql - 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)
```
解决方案
你需要这个:
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;
?
推荐阅读
- arrays - 嵌套for循环检查二维数组中每个字符串的第一个字母是否是c中的辅音
- python - 在虚拟环境中使用 pipenv 进行 Python 依赖管理
- python - 在 python 中访问正则表达式捕获组
- c++ - 函数定义和声明(.h 和 .cpp 文件)错误
- google-apps-script - ReferenceError: 数组未定义 getRange().setvalues()
- php - 如何在 PHP 中搜索父目录,直到找到要包含的特定文件?
- java - java jdbc或者mybatis和redis管道方式一样功能吗?
- flutter - 围绕文本的圆圈,当它很长时延伸到椭圆形(颤振)
- apache - Apache https 反向代理问题
- r - 在 R 处按键更改字符串