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

Mysql 用于更新每个备用列的SQL查询,mysql,sql,Mysql,Sql,在我的数据库中有上万行。有两列,收据和优惠券。每个“收据”值跨越6行,具有相同的收据值和不同的“息票”值 Ex数据库- 我正在尝试进行一个更新查询,该查询将更新每个收据id的第一个实例的优惠券列,然后更新不同收据的所有第二个实例,如wise,等等 我尝试了以下查询,但未正确更新行 update scheme_master set coupon = '3-month' where id % 6 = 1; %语法建议使用SQL Server,因此我认为您需要如下内容: with toupdate

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

Ex数据库-

我正在尝试进行一个更新查询,该查询将更新每个收据id的第一个实例的优惠券列,然后更新不同收据的所有第二个实例,如wise,等等

我尝试了以下查询,但未正确更新行

update scheme_master set coupon = '3-month' where id % 6 = 1;
%语法建议使用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;

您使用的是MySQL还是SQL Server?请适当标记您的问题。mysql xampp apache服务器id是什么?这是优惠券字段的左边的数据数吗?MySQL服务器版本用于右边的语法,使用near'toupdateas select sm.*,在第1行,我需要您的建议…如何在listobx/选择框bcoz中加载超过50000行这会在网页上花费更多的加载时间…我的查询类似于…从Master中选择名称如果您有其他问题,您应该以问题的形式提出,并提供适当的标记、代码示例和其他信息。
update scheme_master
    set coupon = concat((@rn := if(@r = receipt, @rn := @rn + 1,
                                   if(@r := receipt, 1, 1)
                                  )
                         ), '-month')
    order by receipt, id;