PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So verwenden Sie den physischen Speicherort von Zeilen (ROWID) in einer DELETE-Anweisung

Bei PostgreSQL heißt der physische Speicherort der Zeile CTID.

Wenn Sie es also anzeigen möchten, verwenden Sie eine QUERY wie diese:

SELECT CTID FROM table_name

Um es in einer DELETE-Anweisung zu verwenden, um die doppelten Datensätze zu entfernen, verwenden Sie es wie folgt:

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

Denken Sie daran, dass table_name die gewünschte Tabelle ist und other_columns die Spalten sind, die Sie verwenden möchten, um diese zu filtern.

Dh:

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