Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

डुप्लिकेट पंक्तियों को mysql में अद्वितीय मानों में कैसे बदलें?

यह थोड़ा मुश्किल है .. मैंने अपने स्थानीय होस्ट पर परीक्षण किया और यह वही करता है जो आप चाहते हैं .. अगर आपके कोई प्रश्न हैं तो मुझे बताएं। 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

अंतिम आउटपुट इस तरह दिखता है:PICTURE

संपादित करें: यह प्रदर्शन के लिए बेहतर काम कर सकता है

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

मैंने इसे अपने स्थानीय पर परीक्षण किया और यह काम करता है इसलिए आपको इसे चलाने में सक्षम होना चाहिए :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. आउटफाइल एक्सेस में MYSQL अस्वीकृत - लेकिन मेरे उपयोगकर्ता के पास सभी एक्सेस हैं .. और फ़ोल्डर CHMOD 777 है

  2. सॉकेट '/run/mysqld/mysqld.sock' के माध्यम से स्थानीय MySQL सर्वर से कनेक्ट नहीं हो सकता (2)

  3. MySQL और SQL सर्वर पर क्वेरी के माध्यम से तालिका DDL उत्पन्न करें

  4. MySQL तालिका को संशोधित करें कॉलम को शून्य मानों के साथ पंक्तियों में विफल कर दें

  5. क्या कोई Magentos अनुक्रमण सुविधा के बारे में विस्तार से बता सकता है?