2014-12-05 83 views
-1

我有一个表(产品)有重复的products_model字段。 我需要将它们更改为一些新的值。 我可以选择他们:SELECT * FROM products GROUP BY products_model HAVING count(*) >=2mysql修改重复字段

我需要改变products_model = products_model + RANDOM NUMBER

谢谢

+0

恐怕不能按照您期望的方式完成此操作。我可以想出一个更新声明,它会将随机数字添加到products_model,但由于这些数字是随机的,因此无法保证两个相同产品型号的数字不一样。 – Chris 2014-12-05 23:04:24

+0

行,或者一些独特的值like products_model = products_model + products_id – Teo 2014-12-05 23:07:03

回答

0

鉴于这两个领域是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 
0

这将使用变量分配一个序列号,产品具有相同的模型。然后,它会更新除第一个以外的所有型号,以便在型号名称后面显示序列号:

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; 
+0

我有一个错误: 其中seqnum> 1; [错误] 1064 - 您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在产品pI中使用正确的语法附近'as seqnum 有错误: – Teo 2014-12-05 23:56:38