sql >> Databáze >  >> RDS >> Oracle

Odstraňte duplicitní záznamy pomocí rownum v sql

Použijte 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 )

Samozřejmě můžete udělat a.rowid < b.rowid také. rowid je pouze fyzická adresa řádku, takže nezáleží na tom, zda smažete řádek, který má větší nebo menší adresu.

Vaše očekávané výsledky však nedávají smysl.

Expected Result :

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

rownum sady výsledků je vždy přiřazena v době dotazu. To znamená, že konkrétní řádek se může objevit s jiným rownum hodnoty v různých dotazech (nebo když je stejný dotaz spuštěn vícekrát). rownum je vždy sekvenční, takže nikdy nemůžete mít rownum ze 4 v sadě výsledků, aniž by měl také rownum hodnoty 1, 2 a 3 ve stejné sadě výsledků. Ať smažete kterýkoli duplicitní řádek, váš výsledek bude

Očekávaný výsledek:

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

Ale rownum hodnoty jsou libovolné. Pro Oracle by bylo stejně platné vrátit se

Očekávaný výsledek:

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


  1. Jak „odhalit“ číslo v MySQL

  2. SQL Server Express Backup Database | Jak naplánovat automatizaci a vyčištění SQL Express Backup

  3. Načítání data na serveru SQL, CURRENT_TIMESTAMP vs GetDate()

  4. Potřebujete pomoc s vložením dat oddělených čárkami do databáze mysql pomocí PHP