如何使现有列中的重复项唯一?



我正在使用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将不再工作。

相关内容

  • 没有找到相关文章

最新更新