sql >> Databáze >  >> RDS >> Mysql

Odstranění duplicitních řádků v databázi MySQL

Udělal bych to následujícím způsobem:

  1. Vytvořte dočasnou tabulku ze stávající tabulky:

    CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
    
  2. Naplňte dočasnou tabulku pouze požadovanými záznamy:

    INSERT INTO data_to_keep
    SELECT DISTINCT * FROM table_with_dupes_in_it
    
  3. Vyprázdněte stůl

    TRUNCATE TABLE table_with_dupes_in_it
    
  4. Vraťte data z dočasné tabulky do původní tabulky

    INSERT INTO table_with_dupes_in_it
    SELECT * FROM data_to_keep;
    
  5. Vyčistit

    DROP TEMPORARY TABLE data_to_keep
    

Uvědomte si, že to může zabrat obrovské množství paměti a/nebo úložiště, pokud je daný stůl velký. Pokud se jedná o velký stůl, přikláněl bych se k použití skutečného stolu místo dočasného, ​​abych nezabíral nadměrné množství paměti na vašem DB serveru.

UPRAVIT A PŘIDAT:

Pokud se jen obáváte částečných chyb (řádky, kde pouze některá data jsou identická s dříve zadanými daty), budete chtít použít GROUP BY. Když použijete GROUP BY, můžete omezit MySQL tak, aby vrátila pouze jeden řádek, který obsahuje daná data namísto všech.

SELECT *
FROM table
GROUP BY column_name

Měli byste také zvážit použití UNIQUE indexů ve sloupcích, ve kterých nechcete uchovávat duplicitní data, zabráníte tím uživatelům vkládat duplicitní data.



  1. vyberte úroveň z duálního připojení podle úrovně<=4, jak to interně funguje

  2. Vynechejte oprávnění tabulky a S MOŽNOSTÍ GRANT vytvořením pohledů

  3. Úvod do C

  4. jak předat proměnnou v klauzuli WHERE IN Oracle SQL?