Oracle
 sql >> Base de données >  >> RDS >> Oracle

afficher toutes les données pour les lignes en double dans oracle

Vous pouvez toujours utiliser le GROUP BY / HAVING requête dans une clause IN. Cela fonctionne et est relativement simple, mais peut ne pas être particulièrement efficace si le nombre de lignes en double est relativement important.

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

Il serait généralement plus efficace d'utiliser des fonctions analytiques afin d'éviter de toucher la table une deuxième fois.

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

En fonction de ce que vous prévoyez de faire avec les données et du nombre de doublons d'une ligne particulière, vous pouvez également rejoindre table1 à lui-même pour obtenir les données sur une seule ligne

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)