sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo usar la ubicación física de las filas (ROWID) en una instrucción DELETE

En PostgreSQL, la ubicación física de la fila se llama CTID.

Entonces, si desea verlo, use una CONSULTA como esta:

SELECT CTID FROM table_name

Para usarlo en una instrucción DELETE para eliminar los registros duplicados, utilícelo así:

DELETE FROM table_name WHERE CTID NOT IN (
  SELECT RECID FROM 
    (SELECT MIN(CTID) AS RECID, other_columns 
      FROM table_name GROUP BY other_columns) 
  a);

Recuerde que table_name es la tabla deseada y other_columns son las columnas que desea usar para filtrar eso.

Es decir:

DELETE FROM user_department WHERE CTID NOT IN (
  SELECT RECID FROM 
    (SELECT MIN(CTID) AS RECID, ud.user_id, ud.department_id
      FROM user_department ud GROUP BY ud.user_id, ud.department_id) 
  a);