久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何在mysql中將重復行更改為唯一值?

How to change duplicate rows to unique values in mysql?(如何在mysql中將重復行更改為唯一值?)
本文介紹了如何在mysql中將重復行更改為唯一值?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

限時送ChatGPT賬號..

我有一個包含大約 100 萬條記錄的數(shù)據(jù)庫表.我需要在此表中找到所有重復的名稱并使它們唯一.

I have a database table with about 1M records. I need to find all duplicate names in this table and make them unique.

例如...

Id   Name
-----------
1    A
2    A
3    B
4    C
5    C

應(yīng)該改為...

Id   Name
-----------
1    A-1
2    A-2
3    B
4    C-1
5    C-2

是否有使用 mysql 查詢或過程執(zhí)行此操作的有效方法?

Is there an effective way of doing this with a mysql query or procedure?

提前致謝!

推薦答案

這有點棘手.我在本地主機上進行了測試,它可以滿足您的要求.如果您有任何問題,請告訴我.SQL FIDDLE

this is a little tricky.. I tested on my local host and it does what you want.. let me know if you have any questions. SQL FIDDLE

UPDATE temp t1, 
(
    SELECT 
        id as unique_id, 
        new_name 
    FROM(
        SELECT
          id,
          IF(@ROW = Name, @COUNT, @COUNT := 1),
          CONCAT(Name, ' - ', @COUNT) AS new_name,
          @ROW := Name,
          @COUNT := @COUNT + 1
        FROM temp
        JOIN (SELECT @COUNT := 0, @ROW := "") AS t
        WHERE Name IN(SELECT Name FROM temp
        GROUP BY Name
        HAVING COUNT(Name) > 1)
    ) AS temp_test
) as testing
SET t1.Name = testing.new_name where t1.id = testing.unique_id

最終輸出如下所示:圖片

為了性能,這可能會更好

This may work better for performance sake

1.首先運行此查詢

SET SESSION group_concat_max_len = 1000000;  -- longer if needed
SET @query1 := (
SELECT 
    GROUP_CONCAT(DISTINCT unique_name) 
FROM temp
JOIN(
    select Name as unique_name
    FROM temp
    GROUP BY name
    HAVING COUNT(Name) > 1
) as t
);

2.然后運行此更新

UPDATE temp t1, 
(
    SELECT 
        id as unique_id, 
        new_name 
    FROM(
        SELECT
          id,
          IF(@ROW = Name, @COUNT, @COUNT := 1),
          CONCAT(Name, ' - ', @COUNT) AS new_name,
          @ROW := Name,
          @COUNT := @COUNT + 1
        FROM temp
        JOIN (SELECT @COUNT := 0, @ROW := "") AS t
        WHERE FIND_IN_SET (`name`, @query1)
    ) AS temp_test
) as testing
SET t1.Name = testing.new_name where t1.id = testing.unique_id

我在我的本地測試了它并且它有效,所以你應(yīng)該能夠讓它運行:)

I tested this on my local and it works so you should be able to get this to run :)

這篇關(guān)于如何在mysql中將重復行更改為唯一值?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

What SQL Server Datatype Should I Use To Store A Byte[](我應(yīng)該使用什么 SQL Server 數(shù)據(jù)類型來存儲字節(jié) [])
Interpreting type codes in sys.objects in SQL Server(解釋 SQL Server 中 sys.objects 中的類型代碼)
Typeorm Does not return all data(Typeorm 不返回所有數(shù)據(jù))
Typeorm .loadRelationCountAndMap returns zeros(Typeorm .loadRelationCountAndMap 返回零)
Convert multiple sub-queries to on join(將多個子查詢轉(zhuǎn)換為 on join)
How do I get the minute difference between 2 times in T SQL?(如何獲得 T SQL 中 2 次之間的微小差異?)
主站蜘蛛池模板: 在线国产视频观看 | 中文字幕综合 | 久久精品国产久精国产 | 午夜视频免费在线观看 | 国产9久| 欧美日韩视频 | 成年人在线观看视频 | 久久国产精品99久久久久久丝袜 | 亚洲欧美一区二区在线观看 | 欧美白人做受xxxx视频 | 中文字幕精品一区 | 国产高清精品在线 | 日韩乱码一二三 | 国产特级毛片aaaaaa喷潮 | 91久久久久 | 嫩草伊人 | 亚洲综合国产精品 | 久久最新精品 | 欧美激情黄色 | 日日干日日 | 91传媒在线观看 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 蜜桃特黄a∨片免费观看 | 久久精品国产99国产精品 | 黄色三级免费网站 | 亚洲精品www. | 欧美一区二区三区在线观看 | 日本特黄a级高清免费大片 国产精品久久性 | 91精品国产91久久综合桃花 | 亚洲一区二区三区四区五区中文 | 欧美理论片在线 | 亚洲欧美一区二区三区1000 | 国产精品二区三区在线观看 | 国产免费一区二区三区 | 国产高清在线精品一区二区三区 | 欧美一区二区黄 | 老子午夜影院 | 国产一区二区电影 | 国产精品亚洲综合 | 中文字幕久久精品 | 一级毛片,一级毛片 |