Oracle
 sql >> Baza danych >  >> RDS >> Oracle

wyświetl wszystkie dane dla zduplikowanych wierszy w Oracle

Zawsze możesz użyć GROUP BY / HAVING zapytanie w klauzuli IN. Działa to i jest stosunkowo proste, ale może nie być szczególnie wydajne, jeśli liczba zduplikowanych wierszy jest stosunkowo duża.

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

Ogólnie rzecz biorąc, bardziej efektywne byłoby użycie funkcji analitycznych, aby uniknąć ponownego uderzenia w tabelę.

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

W zależności od tego, co planujesz zrobić z danymi i ile może być duplikatów określonego wiersza, możesz również dołączyć do table1 do siebie, aby uzyskać dane w jednym wierszu

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PreparedStatement pomyślnie wykonany w Oracle, ale zgłaszający wyjątek w Microsoft SQL

  2. Grupuj według wartości, które są w kolejności

  3. MODYFIKUJ KOLUMNĘ w oracle — jak sprawdzić, czy kolumna dopuszcza wartość null przed ustawieniem wartości null?

  4. Dodawanie wielu funkcji walidacji (UDF) do Oracle — która metoda działa najszybciej

  5. Zaktualizuj wszystkie wiersze tabeli po określonym czasie