Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Usuń zduplikowane rekordy za pomocą rownum w sql

Użyj rowid

DELETE FROM table_name a
 WHERE EXISTS( SELECT 1
                 FROM table_name b
                WHERE a.id = b.id
                  AND a.name = b.name
                  AND a.rowid > b.rowid )

Oczywiście możesz zrobić a.rowid < b.rowid również. rowid jest tylko fizycznym adresem wiersza, więc nie ma znaczenia, czy usuniesz wiersz, który ma większy czy mniejszy adres.

Twoje oczekiwane wyniki nie mają jednak sensu.

Expected Result :

        ROWNUM         ID NAME
    ---------- ---------- ----------
             4          1 leo_1
             5          2 leo_2
             6          3 leo_3

rownum zestawu wyników jest zawsze przypisywana w czasie zapytania. Oznacza to, że określony wiersz może pojawić się z różnymi rownum wartości w różnych zapytaniach (lub gdy to samo zapytanie jest uruchamiane wiele razy). rownum jest zawsze sekwencyjny, więc nigdy nie możesz mieć rownum z 4 w zestawie wyników bez również rownum wartości 1, 2 i 3 w tym samym zestawie wyników. Niezależnie od tego, który zduplikowany wiersz usuniesz, wynikiem będzie

Oczekiwany wynik :

    ROWNUM         ID NAME
---------- ---------- ----------
         1          1 leo_1
         2          2 leo_2
         3          3 leo_3

Ale rownum wartości są arbitralne. Zwrot Oracle byłby równie ważny

Oczekiwany wynik :

    ROWNUM         ID NAME
---------- ---------- ----------
         1          2 leo_2
         2          3 leo_3
         3          1 leo_1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można skompilować PL/SQL za pomocą BULK COLLECT i FORALL

  2. Jak wygenerować wszystkie daty niedzieli między 2 datami w Oracle sql?

  3. jak ustawić serveroutput na używanie połączenia jdbc w Jmeter?

  4. Oracle Regexp do zastąpienia \n,\r i \t spacją

  5. Warunkowy unikalny indeks w bazie danych h2