PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak używać fizycznej lokalizacji wierszy (ROWID) w instrukcji DELETE?

W PostgreSQL fizyczna lokalizacja wiersza nazywa się CTID.

Więc jeśli chcesz go zobaczyć, użyj QUERY w ten sposób:

SELECT CTID FROM table_name

Aby użyć go w instrukcji DELETE w celu usunięcia zduplikowanych rekordów, użyj go w ten sposób:

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

Pamiętaj, że nazwa_tabeli to żądana tabela, a inne_kolumny to kolumny, których chcesz użyć do jej filtrowania.

Tzn.:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Integracja narzędzi do zarządzania PostgreSQL w środowisku produkcyjnym

  2. Jak pokazać dziadka w hierarchii sql?

  3. Duży zestaw wyników w zapytaniu postgresql

  4. GROUP BY w Postgres - brak równości dla typu danych JSON?

  5. Rails/ActiveRecord Grupa według miesiąca+roku z licznikami