在我的数据库中有数万行。有两栏,收据和优惠券。每个“收据”值跨越 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/