2014-12-05 75 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