sql >> Databáze >  >> RDS >> PostgreSQL

Odstraňte duplicitní řádky z tabulky

Můžete to zkusit spustit několikrát :

delete from mytable where id in (
    select max(id)
      from mytable
     group by name
    having count(1) > 1
);

Kde vícekrát se rovná maximálnímu počtu opakování, které máte v name sloupec.

Jinak můžete zkusit tento složitější dotaz:

delete from mytable where id in (
    select id from mytable
    except 
    (
    select min(id)
      from mytable
     group by name
    having count(1) > 1
    union all
    select min(id)
      from mytable
     group by name
    having count(1) = 1
    )
);

Spuštění tohoto dotazu pouze jednou by mělo odstranit vše, co potřebujete. I když jsem to nezkoušel...



  1. Vnořené příkazy CASE v MySQL

  2. Jaký je příkaz SQL pro vrácení názvů polí tabulky?

  3. Získejte skrytou vstupní hodnotu z databáze po výběru formuláře

  4. Představujeme Agent-Based Database Monitoring s ClusterControl 1.7