sql >> Databasteknik >  >> RDS >> Oracle

visa all data för dubbletter av rader i Oracle

Du kan alltid använda GROUP BY / HAVING fråga i en IN-klausul. Detta fungerar och är relativt enkelt men det kanske inte är särskilt effektivt om antalet dubbletter av rader är 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 skulle i allmänhet vara mer effektivt att använda analytiska funktioner för att undvika att slå i bordet en andra gång.

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

Beroende på vad du planerar att göra med data och hur många dubbletter av en viss rad det kan finnas, kanske du också vill gå med i table1 till sig själv för att få data på en enda rad

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. Analysera och jämför data med Coldfusion &MySQL

  2. MySQL-felhjälp:Okänd kolumn i On-klausul

  3. Lösenordet kontrollerar inte skiftlägeskänslighet

  4. Ignorera mysql-felmeddelanden när du kör en sql-fil