我有一個表(產品)有重複的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