更新重复列的外键 - mysql

时间:2016-03-03 17:12:42

标签: mysql

我有一个产品表:外键(fk id),名称和更多数据。
名称中有重复,但有例如与fk id相关的客户 因此,我想用第一个匹配的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;

1 个答案:

答案 0 :(得分:1)

在mysql中,您可以使用joins in update statements。我将创建一个子查询,返回每个出现多次的名称的最低id(min())。因为在mysql中你不能从正在更新的同一个表中选择,所以在subselect的顶部添加了一个额外的subselect层:

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;