sql >> Database >  >> RDS >> Oracle

bekijk alle gegevens voor dubbele rijen in oracle

U kunt altijd de GROUP BY . gebruiken / HAVING query in een IN-component. Dit werkt en is relatief eenvoudig, maar het is misschien niet bijzonder efficiënt als het aantal dubbele rijen relatief groot is.

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

Het zou over het algemeen efficiënter zijn om analytische functies te gebruiken om te voorkomen dat u een tweede keer op tafel komt.

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

Afhankelijk van wat je van plan bent te doen met de gegevens en hoeveel duplicaten van een bepaalde rij er zijn, wil je misschien ook lid worden van table1 naar zichzelf om de gegevens in een enkele rij te krijgen

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. De database kan niet worden geopend omdat het versie 782 is. Deze server ondersteunt versie 706 en eerder. Een downgradepad wordt niet ondersteund

  2. Hoe telwaarden op te slaan in python

  3. PIVOT in sql 2005

  4. Dynamisch draaien met datum als kolom