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