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

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

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

問題描述

限時送ChatGPT賬號..

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

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

應該改為...

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

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

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

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

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

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

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

相關文檔推薦

What SQL Server Datatype Should I Use To Store A Byte[](我應該使用什么 SQL Server 數據類型來存儲字節 [])
Interpreting type codes in sys.objects in SQL Server(解釋 SQL Server 中 sys.objects 中的類型代碼)
Typeorm Does not return all data(Typeorm 不返回所有數據)
Typeorm .loadRelationCountAndMap returns zeros(Typeorm .loadRelationCountAndMap 返回零)
Convert multiple sub-queries to on join(將多個子查詢轉換為 on join)
How do I get the minute difference between 2 times in T SQL?(如何獲得 T SQL 中 2 次之間的微小差異?)
主站蜘蛛池模板: 亚洲国产精品久久久久秋霞不卡 | 91精品国产色综合久久不卡98 | 人成在线视频 | av黄色免费在线观看 | 午夜av毛片 | 亚洲国产精品精华素 | 欧美日韩高清免费 | 欧美一级片在线观看 | 99精品一级欧美片免费播放 | 在线欧美亚洲 | 瑟瑟免费视频 | 亚洲精品九九 | 成年人在线观看 | 亚洲欧美日韩久久 | 一区二区在线 | 一区二区三区中文字幕 | 日韩av一区在线观看 | 福利成人 | 欧美αv| 龙珠z在线观看 | 玖玖国产精品视频 | 2022精品国偷自产免费观看 | 一区二区久久精品 | 精品真实国产乱文在线 | 91久久久久 | 国产免费麻豆视频 | 在线观看视频中文字幕 | 国产日韩欧美一区 | 中文字幕视频在线 | 亚洲高清av在线 | 精品久久久久久一区二区 | 91精品中文字幕一区二区三区 | 国产精品久久免费观看 | 天堂一区二区三区 | 神马久久久久久久久久 | 国产美女精品 | 亚洲高清视频在线 | 一级毛片在线看 | 欧美一级黄视频 | 夜久久| 欧美1区|