2017-08-13 68 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

相關問題