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

Крайният изход изглежда така:СНИМКА

РЕДАКТИРАНЕ: Това може да работи по-добре с оглед на производителността

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. Използване на променливи като OFFSET в операторите SELECT в съхранените функции на mysql

  2. Създайте уебсайт с MySQL

  3. Отпечатване на таблица хоризонтална вместо вертикална с помощта на PHP

  4. Unicode (гръцки) символи се съхраняват в базата данни като ??????

  5. MySQL 5.7.5+ получава първия ред за групите