gpt4 book ai didi

mysql - 如何更新 mysql 数据库的增量值

转载 作者:行者123 更新时间:2023-11-30 00:07:23 26 4
gpt4 key购买 nike

我将为我的问题举一个小例子。我的数据库中有两个表。

“汽车”,行数:“id”、“name”。“座位”行:“cid”、“体重”。

座位的重量决定了座位的顺序。一辆车可以有 0 到 n 个座位。我的问题是车上的座椅重量相同。

我需要对每辆有两个或更多座位具有相同重量的汽车进行更新。

汽车

--------------------------
id | name
--------------------------
1 | ford
--------------------------

座位

-------------------------------
cid | name | weight
-------------------------------
1 Seat1 | 7
1 Seat2 | 1
1 Seat3 | 7
1 Seat4 | 3
1 Seat5 | 2
1 Seat6 | 3
1 Seat N | N
-------------------------------

我需要:

CID 是 CAR id

座位

-------------------------------
cid | name | weight
-------------------------------
1 Seat1 | 0
1 Seat2 | 1
1 Seat3 | 2
1 Seat4 | 3
1 Seat5 | 4
1 Seat6 | 5
1 Seat N | N
-------------------------------

查询将在一个非常大的数据库上运行,并且会影响很多行,因此需要很快。

我已经完成了表上的连接,但我不知道如何制作完整的更新方法。为此需要 INNER JOIN。

最佳答案

您可以使用用户定义的变量来获得体重栏的序列号

update t 
join (
select `cid`, `name`,@rank:= @rank + 1 rank
from t join
(select @rank:=-1) t1
order by `cid`, `name`
) t2
using(`cid`, `name`)
set weight = t2.rank

Demo

或者,如果您需要每个汽车组的序列重量,那么您可以这样做

update t 
join (
select `cid`, `name`,
@rank:=case when @group = cid
then @rank + 1
else 0 end rank,
@group:=cid
from t join
(select @rank:=-1,@group:= 0) t1
order by `cid`, `name`
) t2
using(`cid`, `name`)
set weight = t2.rank

Demo serial per group

关于mysql - 如何更新 mysql 数据库的增量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24411353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com