根据MYSQL中同一表中的另一列更新列中的值

Vik*_*kas 4 mysql sql

我有一个有3列的表

  1. vid - 自动增量列
  2. video_id - 包含数字
  3. a_id - 包含垃圾数字

该表如下所示.

Vid    Video_id    a_id
101     1            3
102     1            3
103     5            3
104     5            3
105     5            3
106     11           3
107     11           3
108     11           3
109     11           3
110     11           3         
Run Code Online (Sandbox Code Playgroud)

我想根据video_id值更新a_id列值.a_id中的值应更新如下.ex:如果video_id中有5个11位,则a_id中的值应更新1到5.

Vid    Video_id    a_id
101     1            1
102     1            2
103     5            1
104     5            2
105     5            3
106     11           1
107     11           2
108     11           3
109     11           4
110     11           5
Run Code Online (Sandbox Code Playgroud)

M K*_*aid 6

您可以使用用户定义的变量为每个视频组提供排名,然后通过自动增量列与真实表联接并相应地更新a_id

update t
join (
    SELECT 
    Vid,
    @r:= CASE WHEN Video_id = @g THEN @r+1  ELSE @r:=1 END a_id 
    ,@g:=Video_id
    FROM t,(SELECT @r:=0,@g:=0) t1
    ORDER BY Video_id
) t1
on(t.Vid =t1.Vid)
set t.a_id = t1.a_id
Run Code Online (Sandbox Code Playgroud)

演示