用于更新每个备用列的SQL查询

时间:2015-04-11 15:11:41

标签: mysql sql

在我的数据库中有数万行。有两列,收据和优惠券。每个“收据”值跨越6行,具有相同的收据值和不同的“优惠券”值。

Ex数据库 -

receipt    coupon
500        1-mon
500        2-mon
500        3-mon
500        4-mon
500        5-mon 
500        6-mon

501        1-mon
501        2-mon
501        3-mon
501        4-mon
501        5-mon
501        6-mon

502        1-mon
502        2-mon
502        3-mon
502        4-mon
502        5-mon
502        6-mon

我正在尝试更新查询,更新每个收据ID的第一个实例的优惠券列,然后明智的所有第二个不同收据实例等等

我尝试了以下查询,但这没有正确更新行...

update scheme_master set coupon = '3-month' where id % 6 = 1;

1 个答案:

答案 0 :(得分:0)

%语法建议SQL Server,所以我想你想要这样的东西:

with toupdate as (
      select sm.*,
             row_number() over (partition by receipt order by id) as seqnum
      from scheme_master sm
     )
update toupdate
    set coupon = cast(seqnum as varchar(255)) + '-month';

但是,在您的示例查询中,您使用的是“3”和“1”,我不明白:

update scheme_master set coupon = '3-month' where id % 6 = 1;
-----------------------------------^ ----------------------^

编辑:

在MySQL中,你可以这样做:

update scheme_master
    set coupon = concat((@rn := if(@r = receipt, @rn := @rn + 1,
                                   if(@r := receipt, 1, 1)
                                  )
                         ), '-month')
    order by receipt, id;