2016-03-03 41 views
0

我有一個產品表:外鍵(fk id),名稱和更多的數據。
有在名稱重複,但也有例如有關FK ID
所以我想更新重複的列他們的外鍵 - mysql

例子中,第一個匹配的FK ID更新重複的客戶:

fk id name 
1  abc 
2  abc 
3  abc 
67  abc 

表後更新:

fk id  name 

1   abc 

1   abc 

1   abc 

1   abc 

到目前爲止,我有一個查詢,把它們放在一起在一個逗號分隔的列表,但我錯過了更新:

SELECT 
count(*) as amount, 
group_concat(name) as names, 
group_concat(id) as ids 
FROM db.product 
GROUP BY name 
HAVING amount> 1; 
+0

通過第一ID匹配你的意思了最低所有ID的:因爲在MySQL中,你不能從正在更新的同桌,所以子查詢的一個額外層的子選擇的頂部增加選擇一樣的名字? – Shadow

+0

是的,第一個匹配每個名字的ID –

回答

1

在MySQL中,你可以使用joins in update statements。我會創建一個子查詢,爲每個出現多次的名稱返回最低的id(min())。

UPDATE db.product 
INNER JOIN (SELECT * FROM 
(SELECT name, min(id) as minid 
FROM db.product 
GROUP BY name 
HAVING count(*)> 1) t2) t on t.name=db.product.name 
SET db.product.id=t.minid; 
+0

謝謝@陰影。 –