Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để thay đổi các hàng trùng lặp thành các giá trị duy nhất trong mysql?

đ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 :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dữ liệu POST quá lớn. Giảm dữ liệu hoặc tăng post_max_size

  2. Làm cách nào để xuất văn bản tiếng Ả Rập từ cơ sở dữ liệu MySQL sang csv bằng cách sử dụng cóc cho MySQL?

  3. SQLite INSERT - TRÊN CẬP NHẬT KHÓA DUPLICATE (UPSERT)

  4. truy vấn con (Đối số không chính xác để CHỐNG LẠI) bằng cách sử dụng Mysql

  5. Thêm các cột mới vào bảng hiện có trong quá trình di chuyển trong Laravel