Estoy usando postgres.
Quiero eliminar filas Duplicadas.
La condición es que , 1 copia del conjunto de filas duplicadas no sería eliminado.

yo.e : si hay 5 registros duplicados, a continuación, 4 de ellos serán eliminados.

posibles duplicados de Cómo eliminar filas duplicadas con SQL?
qué irónico! lol posible duplicado de cómo eliminar duplicados»,…

OriginalEl autor Avadhesh | 2010-09-23

3 Comentarios

  1. 17

    Pruebe los pasos descritos en este artículo: Eliminación de duplicados de una base de datos PostgreSQL.

    Describe una situación cuando usted tiene que tratar con gran cantidad de datos que no es posible group by.

    Una solución simple sería este:

    DELETE FROM foo
           WHERE id NOT IN (SELECT min(id) --or max(id)
                            FROM foo
                            GROUP BY hash)

    Donde hash es algo que se duplica.

    ¿esto no es eliminar todas las filas que no tienen duplicados, también?
    no, porque hay un pequeño signo de igual (=) antes del 1 que nos dice que nos quiere tomar min(id) de todos los grupos posibles, incluso las que contienen sólo uno de los miembros; por lo tanto, no se preocupe, usted no eliminar los datos que no se duplica
    es la having count (*) >=1 indicamos ? tengo el mismo resultado si puedo ejecutar : ELIMINAR DE foo DONDE id NO IN (SELECT min(id) DE foo GRUPO de hash)
    tienes toda la razón, esa es la forma en que la deduplicación es generalmente de hecho, yo no sé por qué no me he dado cuenta antes; la idea de que esta respuesta no es tanto la idea de la deduplicación en sí, sino el hecho de que calcular un hash para todas las columnas que queremos agrupar por y, a continuación, eliminar duplicados

    OriginalEl autor Denis Valeev

  2. 2
    delete from table
    where not id in 
    (select max(id) from table group by [duplicate row])

    Esta es aleatorio (Valor máx.) elección de la fila que usted necesita para mantener.
    Si usted tiene aggre con esto por favor proporcione más detalles

    OriginalEl autor adopilot

  3. 1

    Más rápido es unirse a la misma mesa.
    http://www.postgresql.org/docs/8.1/interactive/sql-delete.html

    CREATE TABLE test(id INT,id2 INT);
    CREATE TABLE
    mapy=# INSERT INTO test VALUES(1,2);
    INSERT 0 1
    mapy=# INSERT INTO test VALUES(1,3);
    INSERT 0 1
    mapy=# INSERT INTO test VALUES(1,4);
    INSERT 0 1
    
    DELETE FROM test t1 USING test t2 WHERE t1.id=t2.id AND t1.id2<t2.id2;
    DELETE 2
    mapy=# SELECT * FROM test;
     id | id2 
    ----+-----
      1 |   4
    (1 row)

    OriginalEl autor baklarz2048

Dejar respuesta

Please enter your comment!
Please enter your name here