How do i make duplicates in a existing column unique?
我使用的是MySQL5.6服务器。我使用navicat在数据库中工作。
我已经搜索并找到了很多可能的解决方法,但没有一个对我有用。
我有一张36000行左右的桌子。我有一个列wich allowes duplicate entry,但我想使行中的重复项唯一。有重复项的列
我可以通过这个查询找到我的副本。但是有很多人手动编辑它们。搜索结果
我要找的是一种做这些事情的方法。
用新的唯一条目更新重复项。
在另一列中为每个重复项添加一个文本项。(我有几个空列可以用来添加一些文本。
用唯一条目更新整个列。(不重要的是,它的调用者必须是唯一的。)
事先谢谢。
编辑-这里有一个名为id_nb的唯一列。我要更改的列不应是唯一的。
用新的唯一条目更新重复项。
假设您有一个名为id的唯一列。
在另一列中为每个重复项添加一个文本项。(我有几个空列可以用来添加一些文本。
对不起,我不太明白第三个问题。顺便说一下,如果您已经执行了第一个SQL,第二个SQL将不再工作。
- 第三种方法是几乎完全清除列中的所有条目,并从零开始使用唯一的条目。比如12、3、4等等,我从戈登那里得到的答案效果很好。还要试试这两个,看看它是怎么工作的。
- 两个都试过了。似乎不能让他们工作。应该说我对这个数据库有点陌生。是否将2X ID更改为唯一ID列?
- 首先,是的,你应该把所有的"id"都改成"id_nb"
- 其次,如果itemtemplate_id列已经是唯一的,那么这两个列将不再工作。
- 尝试第二个查询时出错。[SQL]更新itemtemplate set itemtemplate_id=(select md5(uuid()),packageid='duplicates'在_set(id_nb,(从itemtemplate group中选择group_concat(id_nb)by itemtemplate_id having(count(itemtemplate_id)>1)));[err]1093-不能在from子句中为更新指定目标表'itemtemplate'。
- 抱歉,这是我的错误,请尝试"更新itemtemplate set itemtemplate"(选择md5(uuid())),packageid='duplicates'在其中查找_in_set(id_nb,(select group_concat(id_nb)from(sellect*from itemtemplate)template group by itemtemplate_id having(count(itemtemplate_id)>1));
- 第一个应该是"update itemtemplate set itemtemplate"(更新itemtemplate set itemtemplate)id=(select md5(uuid()),其中find_in_set(id,(select group_concat(id)from(select*from itemtemplate)template group by itemtemplate_id having(count(itemtemplate_id)>1));
我假设您在表中没有唯一的列。如果是这样,您可以对变量执行此操作:
1 2 3 4 5 6 7 8 9 10 11
| 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_nb。
- 看起来有点管用。从560多个副本到27个副本。我想我可以手动修复其余部分。谢谢你的帮助,戈登。