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

se alle data for duplikerede rækker i Oracle

Du kan altid bruge GROUP BY / HAVING forespørgsel i en IN-klausul. Dette virker og er relativt ligetil, men det er måske ikke særlig effektivt, hvis antallet af duplikerede rækker er relativt stort.

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

Det ville generelt være mere effektivt at bruge analytiske funktioner for at undgå at ramme bordet en anden gang.

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

Afhængigt af, hvad du planlægger at gøre med dataene, og hvor mange dubletter af en bestemt række, der måtte være, vil du måske også tilslutte dig table1 til sig selv for at få dataene i en enkelt række

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. Tilslutning af oraklet i Android-applikationen

  2. Hvordan deler man en én mysql-forbindelse mellem flere tråde?

  3. Kompileringsproblem med MySQL C API på MAC OS X 10.6

  4. Find linjeskift og vognretur (\r\n) i MySQL