điều này hơi phức tạp .. Tôi đã thử nghiệm trên máy chủ cục bộ của mình và nó thực hiện những gì bạn muốn .. hãy cho tôi biết nếu bạn có bất kỳ câu hỏi nào. 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
Kết quả cuối cùng trông giống như sau: HÌNH ẢNH
CHỈNH SỬA: Điều này có thể hoạt động tốt hơn vì lợi ích hiệu suất
1. ĐẦU TIÊN CHẠY CÂU HỎI NÀY
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. SAU ĐÓ CHẠY BẢN CẬP NHẬT NÀY
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
Tôi đã thử nghiệm cái này trên cục bộ của mình và nó hoạt động nên bạn có thể chạy cái này :)