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

zobrazit všechna data pro duplicitní řádky v oracle

Vždy můžete použít GROUP BY / HAVING dotaz v klauzuli IN. Funguje to a je to relativně jednoduché, ale nemusí to být zvlášť efektivní, pokud je počet duplicitních řádků relativně velký.

SELECT *
  FROM table1
 WHERE (name, type_id) IN (SELECT name, type_id
                             FROM table1
                            GROUP BY name, type_id
                           HAVING COUNT(*) > 1)

Obecně by bylo efektivnější používat analytické funkce, abyste se vyhnuli druhému zásahu do tabulky.

SELECT *
  FROM (SELECT id, 
               name,
               type_id,
               code,
               lat,
               long,
               count(*) over (partition by name, type_id) cnt
          FROM table1)
 WHERE cnt > 1

V závislosti na tom, co s daty plánujete udělat a kolik duplikátů konkrétního řádku může existovat, se možná budete chtít připojit k table1 k sobě, aby získala data v jednom řádku

SELECT a.name,
       a.type_id,
       a.id,
       b.id,
       a.code,
       b.code,
       a.lat,
       b.lat,
       a.long,
       b.long
  FROM table1 a
       JOIN table1 b ON (a.name = b.name AND
                         a.type_id = b.type_id AND
                         a.rowid > b.rowid)


  1. Kdy je lepší psát ad hoc sql vs uložené procedury

  2. Vybrat / vložit verzi Upsert:existuje návrhový vzor pro vysokou souběžnost?

  3. initdb:nelze změnit oprávnění adresáře v kontejneru Postgresql

  4. Jak provedu velké neblokující aktualizace v PostgreSQL?