sql >> Database teknologi >  >> RDS >> Oracle

Oracle sletter dubletter baseret på en betingelse

Du kan opnå dette ved at bruge følgende forespørgsel:

delete from  tabela.lorik O
where O.netamt = 0 
AND EXISTS (SELECT 1 FROM tabela.lorik I
WHERE I.ID = O.ID AND I.netamt <> 0)

Jeg går ud fra, at du kun skal slette poster, hvor det er netamount = 0 Hvis ikke, så kommenter nedenfor.

Hvis du ønsker at beholde en ikke-nul-indgang og slette alle andre (i tilfælde af alle nuller, en post med nul som netamount vil blive bevaret), så kan du bruge følgende forespørgsel:

DELETE FROM TABELA.LORIK O
WHERE
    ROWID IN (
        SELECT
            RWID
        FROM
            (
                SELECT
                    ROWID AS RWID,
                    ROW_NUMBER() OVER(
                        PARTITION BY ID
                        ORDER BY
                            CASE
                                WHEN NETAMT = 0 THEN 2
                                ELSE 1
                            END
                    ) AS RN
                FROM
                    TABELA.LORIK
            )
        WHERE
            RN > 1
    );

Skål!!



  1. MySQL Store Image BLOB Dårlig praksis ydeevne

  2. Hvad er mere effektivt smallint eller karakter(10)?

  3. SYS_EXTRACT_UTC() Funktion i Oracle

  4. PHP pagineringsklasse