我有一个表(产品)有重复的products_model字段。 我需要将它们更改为一些新的值。 我可以选择他们:SELECT * FROM products GROUP BY products_model HAVING count(*) >=2
mysql修改重复字段
我需要改变products_model = products_model + RANDOM NUMBER
谢谢
我有一个表(产品)有重复的products_model字段。 我需要将它们更改为一些新的值。 我可以选择他们:SELECT * FROM products GROUP BY products_model HAVING count(*) >=2
mysql修改重复字段
我需要改变products_model = products_model + RANDOM NUMBER
谢谢
鉴于这两个领域是VARCHAR处理这样做的工作,串联products_model并用下划线
update products p1,
products p2
set
p1.products_model = concat(p1.products_model, '_', p1.products_id),
p2.products_model = concat(p2.products_model, '_', p2.products_id)
where
p1.products_model = p2.products_model
and p1.products_id > p2.products_id
products_id
之前:
id products_model products_id
1 A a
2 A b
3 B a
4 C a
5 C b
后:
id products_model products_id
1 A_a a
2 A_b b
3 B a
4 C_a a
5 C_b b
这将使用变量分配一个序列号,产品具有相同的模型。然后,它会更新除第一个以外的所有型号,以便在型号名称后面显示序列号:
update products p join
(select p.*,
(@rn := if(@pm = products_model, @rn + 1,
if(@pm := products_model, 1, 1)
)
) as seqnum
from products p
order by products_model
) pp
on p.id = pp.id cross join
(select @pm := '', @rn := 0) vars
set products_model = concat_ws('_', products_model, seqnum)
where seqnum > 1;
我有一个错误: 其中seqnum> 1; [错误] 1064 - 您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在产品pI中使用正确的语法附近'as seqnum 有错误: – Teo 2014-12-05 23:56:38
恐怕不能按照您期望的方式完成此操作。我可以想出一个更新声明,它会将随机数字添加到products_model,但由于这些数字是随机的,因此无法保证两个相同产品型号的数字不一样。 – Chris 2014-12-05 23:04:24
行,或者一些独特的值like products_model = products_model + products_id – Teo 2014-12-05 23:07:03