在表格中添加增量ID取决于其他列

时间:2016-09-10 18:23:46

标签: mysql

您好我想在表中添加一个ID为Incremental的列,但我想这个ID的增量取决于其他列。

这是我的表

我是Mysql的新手。我想在表中添加一个列,其值取决于同一个表中的另一个列值。例如,我有如下的company_table:

      code  | name        | type |
      ----------------------------
      AAA   | AAAAA       | A    | 
      BBB   | BBBBB       | A    |  
      CCC   | CCCCC       | C    | 
      DDD   | DDDDD       | D    | 
      EEE   | EEEEE       | D    | 

我想为类型A添加ID增量。示例

  code  | name        | type | ID  |
  ----------------------------------
  AAA   | AAAAA       | A    | 1   |
  BBB   | BBBBB       | A    | 2   |
  CCC   | CCCCC       | C    | NULL| 
  DDD   | DDDDD       | D    | NULL|
  EEE   | EEEEE       | D    | NULL|

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用变量执行此操作:

select t.*,
       (case when type = 'A' then @rn := @rn + 1 end) as id
from t cross join
     (select @rn := 0) params
order by code;

注意:SQL表代表无序集。需要order by来保证行的排序。根据您的数据,看起来第一列确定了排序。

编辑:

相同的基本思想可用于表格中的列。如果你没有专栏:

alter table t add column id int;

然后:

set @rn := 0;

update t
    set id = (@rn := @rn + 1)
    where type = 'A'
    order by ??;

如果您关心值的排序,请将相应的列放在order by子句中。否则,值将是正确的,但它们的顺序不确定。