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

标签 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;

最佳答案

% 语法建议使用 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 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29579433/

相关文章:

php - 当代码只运行一次时,为什么我的网站会插入两条记录!

mysql - 不稳定的 MySQL st_distance_sphere 结果

mysql - 如何优化count和group by子查询操作

mysql - 如何使用matlab数据库工具箱在数据库表中插入日期和时间

sql - 如何在SQL Server中解决 'invalid object name'?

mysql - Django Postgres 聚合函数

php - Mysql 分层查询忽略重复行(但它不应该!)

mysql - 比较两个表的计数

PHP/MYSQL 添加按钮到列

sql - ORA-00933: SQL 命令未正确结束