Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Zeigen Sie alle Daten für doppelte Zeilen in Oracle an

Sie können immer GROUP BY verwenden / HAVING Abfrage in einer IN-Klausel. Dies funktioniert und ist relativ einfach, aber möglicherweise nicht besonders effizient, wenn die Anzahl der doppelten Zeilen relativ groß ist.

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

Es wäre im Allgemeinen effizienter, analytische Funktionen zu verwenden, um nicht ein zweites Mal auf den Tisch zu fallen.

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

Je nachdem, was Sie mit den Daten vorhaben und wie viele Duplikate einer bestimmten Zeile möglicherweise vorhanden sind, möchten Sie möglicherweise auch table1 verknüpfen zu sich selbst, um die Daten in einer einzelnen Zeile zu erhalten

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)