PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment utiliser l'emplacement physique des lignes (ROWID) dans une instruction DELETE

Sur PostgreSQL, l'emplacement physique de la ligne est appelé CTID.

Donc, si vous voulez le voir, utilisez une requête comme celle-ci :

SELECT CTID FROM table_name

Pour l'utiliser sur une instruction DELETE pour supprimer les enregistrements en double, utilisez-le comme ceci :

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

N'oubliez pas que table_name est la table souhaitée et other_columns sont les colonnes que vous souhaitez utiliser pour filtrer cela.

C'est-à-dire :

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