我有一个产品表:外键(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;
答案 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;