PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come utilizzare la posizione fisica delle righe (ROWID) in un'istruzione DELETE

Su PostgreSQL la posizione fisica della riga è chiamata CTID.

Quindi, se vuoi vederlo, usa una QUERY come questa:

SELECT CTID FROM table_name

Per utilizzarlo su un'istruzione DELETE per rimuovere i record duplicati, utilizzalo in questo modo:

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

Ricorda che table_name è la tabella desiderata e other_columns sono le colonne che vuoi utilizzare per filtrarla.

Cioè:

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