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
-------------------------------------------
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 |