久久久久久久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

應該改為...

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

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

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

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

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

相關文檔推薦

What SQL Server Datatype Should I Use To Store A Byte[](我應該使用什么 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(將多個子查詢轉換為 on join)
How do I get the minute difference between 2 times in T SQL?(如何獲得 T SQL 中 2 次之間的微小差異?)
主站蜘蛛池模板: 91天堂网| 欧美一级片中文字幕 | 国产一区二区三区免费视频 | 国产成人精品免高潮在线观看 | 久久久久久毛片免费观看 | 99精品亚洲国产精品久久不卡 | 精品国产18久久久久久二百 | 日韩视频区 | 中文字幕一区二区三区乱码在线 | 美女在线视频一区二区三区 | 狠狠干狠狠操 | 久久国产精品72免费观看 | 99久9 | 国产精品无码专区在线观看 | 偷拍自拍在线观看 | 日屁网站| 色精品 | av高清 | 欧美精品一区在线 | 黄色一级大片在线免费看产 | 亚洲国产成人久久久 | 国产欧美精品一区二区三区 | 国产成人免费在线观看 | 久久精品99久久 | 亚洲永久| 久久久久久久久国产精品 | 欧美白人做受xxxx视频 | 日韩二三区 | 夜久久| 久久精品国产99国产精品 | 91av视频| 在线观看视频福利 | 中文字幕国产一区 | 激情av免费看 | 欧美一级α片 | 欧美国产视频 | 久久免费香蕉视频 | 日韩av在线中文字幕 | 日本不卡视频在线播放 | 精品不卡 | 国产乱码精品1区2区3区 |