mysql - Mysql通过删除差异更新列
问题描述
我不知道如何用语言来解释这一点。所以请让我举个例子。假设按order
列排序的项目表:
| id | name | order |
| 5 | x | 1 |
| 2 | y | 3 |
| 3 | z | 4 |
| 7 | p | 8 |
我想以order
一种方式更新列,其中每个列与它们的连续行有 1 个差异,同时保持顺序。期望的结果:
| id | name | order |
| 5 | x | 1 |
| 2 | y | 2 |
| 3 | z | 3 |
| 7 | p | 4 |
编辑:选择 row_number() 不是我的解决方案,因为我想更改订单,而且我不只是在寻找行号。
解决方案
在 MySQL8 中,只需使用row_number()
:
select t.*,
row_number() over(order by ord) as new_ord
from mytable t
这表明可以在需要时轻松地即时计算信息,并导致发现存储此类派生信息可能不是一个好主意。在添加或删除新行时保持最新是很乏味的。
相反,您可以使用上述查询,或将其放在视图中:
create view myview as
select t.*,
row_number() over(order by ord) as new_ord
from mytable t
注意:order
是语言关键字,我用它ord
代替。
如果您真的需要update
, 用于一次性任务,例如:
update mytable t
inner join (
select id, row_number() over(order by ord) as new_ord from mytable
) t1 on t1.id = t.id
set t.ord = t1.new_ord
推荐阅读
- javascript - 使用机器人框架将滚动元素放入视图时出错
- node.js - 想使用猫鼬 updateOne 但它没有更新
- github - 使用 github 操作自动部署静态 nuxt js 项目
- python - 脚本以在具有重复的子组之间公平划分大列表
- powershell - 即使使用 try/catch,Powershell 异常也会停止执行
- python - catboost CatBoostClassifier 中 custom_loss 和 custom_metric 的区别
- php - 我只想在第一个子元素 php 上添加活动类,它是一个基于 amp 的代码
- java - Java在递归方法中保留布尔值
- lua - 是否可以编写一个接触模型的移动部件并且模型一旦损坏就会消失?
- javascript - 当我们在猫鼬函数中有多个过滤器时使用什么