repetidos - Encontrar filas duplicadas con PostgreSQL
traer registros repetidos postgresql (3)
Aquí está mi opinión sobre esto.
select * from (
SELECT id,
ROW_NUMBER() OVER(PARTITION BY merchant_Id, url ORDER BY id asc) AS Row
FROM Photos
) dups
where
dups.Row > 1
Siéntase libre de jugar con el orden por adaptar los registros que desea eliminar a su especificación.
SQL Fiddle => http://sqlfiddle.com/#!15/d6941/1/0
SQL Fiddle para Postgres 9.2 ya no es compatible; actualizando SQL Fiddle a postgres 9.3
Tenemos una tabla de fotos con las siguientes columnas:
id, merchant_id, url
esta tabla contiene valores duplicados para la combinación merchant_id, url
. por lo que es posible que una fila aparezca más varias veces.
234 some_merchant http://www.some-image-url.com/abscde1213
235 some_merchant http://www.some-image-url.com/abscde1213
236 some_merchant http://www.some-image-url.com/abscde1213
¿Cuál es la mejor manera de eliminar esas duplicaciones? (Uso PostgreSQL 9.2 y Rails 3.)
La segunda parte de la respuesta de Sgeddes no funciona en Postgres (el violín usa MySQL). Aquí hay una versión actualizada de su respuesta usando Postgres: http://sqlfiddle.com/#!12/6b1a7/1
DELETE FROM Photos AS P1
USING Photos AS P2
WHERE P1.id > P2.id
AND P1.merchant_id = P2.merchant_id
AND P1.url = P2.url;
Veo un par de opciones para ti.
Para una forma rápida de hacerlo, use algo como esto (se supone que su columna de ID no es única ya que menciona 234 varias veces más arriba):
CREATE TABLE tmpPhotos AS SELECT DISTINCT * FROM Photos;
DROP TABLE Photos;
ALTER TABLE tmpPhotos RENAME TO Photos;
Aquí está el violín de SQL .
Tendrá que agregar sus limitaciones a la tabla si tiene alguna.
Si su columna de ID es única, puede hacer algo como mantener su ID más baja:
DELETE FROM P1
USING Photos P1, Photos P2
WHERE P1.id > P2.id
AND P1.merchant_id = P2.merchant_id
AND P1.url = P2.url;
Y el Fiddle .