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

时间:2014-05-27 06:24:34

标签: mysql sql

我有一个有3列的表

  1. vid - 自动增量列
  2. video_id - 包含数字
  3. a_id - 包含垃圾数字
  4. 该表如下所示。

    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         
    

    我想根据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
    

1 个答案:

答案 0 :(得分: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

Demo