我正在使用MySQL 5.6服务器。我使用 Navicat 在 DB 中工作。
我已经搜索并找到了很多可能的解决方案来解决我的问题,但没有一个对我有用。
我有一个大约 36000 行的表。我有一列允许重复条目,但我想使行中的重复项唯一。包含重复项的列
我可以使用此查询找到我的重复项。 但是太多了,无法手动编辑它们。搜索结果
SELECT name, COUNT(ItemTemplate_ID)
FROM itemtemplate
GROUP BY ItemTemplate_ID
HAVING ( COUNT(ItemTemplate_ID) > 1 )
我正在寻找一种做这些事情的方法。
使用新的唯一条目更新重复项。
在另一列中为每个重复项添加一个文本条目。(我也有几个空列可以用来添加一些文本。
使用唯一条目更新整个列。(不管它叫什么,它必须是唯一的。
提前谢谢。
编辑 - 已存在一个名为 Id_nb 的唯一列。 我要更改条目的列不应该是唯一的。
让我假设表中没有唯一的列。 如果是这样,您可以使用变量执行此操作:
set @rn := 0;
set @it := '';
update itemtemplate it
set it.ItemTemplate_ID = (case when @it = it.ItemTemplate_ID
then concat_ws('_', it.name, (@rn := @rn + 1))
when @it := it.ItemTemplate_ID
then if(@rn := 0, it.ItemTemplate_ID, it.ItemTemplate_ID)
else if(@rn := 0, it.ItemTemplate_ID, it.ItemTemplate_ID)
end)
order by it.ItemTemplate_ID;
此方法假定还没有名称为"ABC"和"ABC_1"的列。
使用新的唯一条目更新重复项。
假设您有一个名为 id 的唯一列。
update itemtemplate set ItemTemplate_ID = (select md5(uuid())) where
FIND_IN_SET(id,(SELECT GROUP_CONCAT(id) FROM itemtemplate GROUP BY ItemTemplate_ID HAVING ( COUNT(ItemTemplate_ID) > 1 ) ));
在另一列中为每个重复项添加一个文本条目。(我也有几个空列可以用来添加一些文本。
update itemtemplate set ItemTemplate_ID = (select md5(uuid())), emptyColumn='text' where
FIND_IN_SET(id,(SELECT GROUP_CONCAT(id) FROM itemtemplate GROUP BY ItemTemplate_ID HAVING ( COUNT(ItemTemplate_ID) > 1 ) ));
对不起,我不太明白第三个问题。 顺便说一下,如果你已经执行了第一个sql,第二个sql将不再工作。