sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man använder den fysiska platsen för rader (ROWID) i en DELETE-sats

På PostgreSQL kallas den fysiska platsen för raden CTID.

Så om du vill se den använd en QUERY så här:

SELECT CTID FROM table_name

För att använda den på en DELETE-sats för att ta bort de dubblerade posterna, använd den så här:

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

Kom ihåg att tabellnamn är den önskade tabellen och andra_kolumner är de kolumner som du vill använda för att filtrera det.

Dvs:

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


  1. BESTÄLLNING AV Alias ​​fungerar inte

  2. MIN() Funktion i PostgreSQL

  3. Beräkna vinst baserat på först-in, först-ut-prissättning

  4. Hur man återställer databasen dubbelkodad av mysqldump