Re: borrar registros repetidos

From: Sebastián Villalba <sebastian(at)fcm(dot)unc(dot)edu(dot)ar>
To: "Javier Aquino H(dot)" <JAquino(at)LexusEditores(dot)com>, "Mario Gonzalez \( mario__ \)" <gonzalemario(at)gmail(dot)com>, =?ISO-8859-1?Q?Postgres_Espa=F1ol_?=<pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: borrar registros repetidos
Date: 2006-09-23 00:35:46
Message-ID: 20060923003024.M55880@fcm.unc.edu.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Javier...

On Fri, 22 Sep 2006 19:20:56 -0500, Javier Aquino H. wrote
> La verdad discrepo contigo con esa sentencia SQL por varios motivos
> pero lo primordial es:
>
> - El alias p2 no está definido en ningun lugar de la sentencia (
> solo para comenzar )

Efectivamente. Fué un error mío que ya lo corregí

> - Si el select interno devuelve el nombre 'Juan
> Perez' entonces la sentencia delete externa borraría a todos los
> 'Juan Perez' y lo que se quiere es que borre todos menos 1.

Eso lo hace. Fijate que borraría todos los 'Juan Perez' que tengan id mayor al
que encuentra primero. Aquí te mando la verificación:

---------------------
seba=# CREATE TABLE persona (id serial primary key, nombre varchar(50));
NOTICE: CREATE TABLE creará una secuencia implícita «persona_id_seq» para la
columna serial «persona.id»
NOTICE: CREATE TABLE / PRIMARY KEY creará el índice implícito «persona_pkey»
para la tabla «persona»
CREATE TABLE
seba=# INSERT INTO persona(nombre) VALUES('seba');
INSERT 0 1
seba=# INSERT INTO persona(nombre) VALUES('juan');
INSERT 0 1
seba=# INSERT INTO persona(nombre) VALUES('pepe');
INSERT 0 1
seba=# INSERT INTO persona(nombre) VALUES('seba');
INSERT 0 1
seba=# INSERT INTO persona(nombre) VALUES('seba');
INSERT 0 1
seba=# INSERT INTO persona(nombre) VALUES('beto');
INSERT 0 1
seba=# INSERT INTO persona(nombre) VALUES('seba');
INSERT 0 1
seba=# SELECT * FROM persona;
id | nombre
----+--------
1 | seba
2 | juan
3 | pepe
4 | seba
5 | seba
6 | beto
7 | seba
(7 filas)

seba=# DELETE FROM persona WHERE nombre IN (SELECT p1.nombre FROM persona p1
WHERE persona.id > p1.id);
DELETE 3
seba=# SELECT * FROM persona;
id | nombre
----+--------
1 | seba
2 | juan
3 | pepe
6 | beto
(4 filas)

seba=#
---------------------

Saludos...

-
-------------------------------------------
Sebastián Villalba
sebastian(at)fcm(dot)unc(dot)edu(dot)ar
-------------------------------------------

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Javier Aquino H. 2006-09-23 01:25:01 Re: borrar registros repetidos
Previous Message Javier Aquino H. 2006-09-23 00:20:56 Re: borrar registros repetidos