2017-08-13 67 views
0

我正在使用MySQL 5.6服务器。我使用Navicat在数据库中工作。如何使现有列中的重复项具有唯一性?

我已经搜索并找到了很多可能的解决方案来解决我的问题,但他们都没有为我工作。

我有一个大约36000行的表。我有一个列允许重复entrys,但我想使行中的副本唯一。 Column with duplicates

我可以使用此查询找到我的副本。 但有很多手动编辑它们。 Search Result

SELECT name, COUNT(ItemTemplate_ID) 
FROM itemtemplate 
GROUP BY ItemTemplate_ID 
HAVING (COUNT(ItemTemplate_ID) > 1) 

我所寻找的是一个方式做这些事情之一。

用新的唯一条目更新重复项。

在每个重复项的另一列中添加文本条目。 (我有几个空列的,我可以用它来添加一些文字了。

更新具有独特的条目整列。(不事关什么的卡莱只是必须是唯一的。)

谢谢提前

编辑 - 有媒体链接是一个名为Id_nb唯一列 我想改变中的条目不应该是唯一的列

+0

你在表中有一个独特的列吗? –

+0

是的,我有一个独特的列 – Belthax

回答

0

让我假设你没有在表中的唯一列。如果是这样,你可以这样做变量:

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”的列。

+0

我猜这将无法正常工作,当我有一个独特的列allready我唯一的列被称为Id_nb。 – Belthax

+0

看起来好像有点过了,它从560多个副本变成了27个副本,我想我可以手动修复剩下的问题,感谢Gordon的帮助 – Belthax

0

用新的唯一条目更新重复项。

假设您有一个名为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将不会工作了

+0

T他的第三个几乎只是清除了栏目中的所有主题,并从头开始用独特的条目。就像1 2 3 4等。我从Gordon得到的答案虽然工作得很好。要试试这两个也看看它是如何工作的。 – Belthax

+0

试了两个。不能让他们工作。应该可能对这个数据库的东西说一些新的东西。我是否将2x ID更改为我的唯一ID列? – Belthax

+0

首先,是的,你应该把所有的“id”改为“Id_nb” – joey

相关问题