Blog > Komentarze do wpisu
Oracle - odnajdywanie duplikatów, powtórzeń wierszy / danych w tabeli

Jeśli w tabeli próbujesz odnaleźć duplikaty danych (powtórzone wiersze, bądź powtórzone wartości w dowolnej kombinacji kolumn) możesz skorzystać z poniższego sposobu.

Przygotujmy najpierw dane testowe:


DROP TABLE find_duplicates;

CREATE TABLE find_duplicates
(
   col0   NUMBER,
   col1   VARCHAR2 (30),
   col2   VARCHAR2 (30),
   col3   VARCHAR2 (30)
);

INSERT INTO find_duplicates VALUES(1, 'Jan', 'Kowalski', 'Kowal');
INSERT INTO find_duplicates VALUES(2, 'Aga', 'Brzeczyszczykiewicz', 'Kowal');
INSERT INTO find_duplicates VALUES(2, 'Tomasz', 'Kowalski', 'Kowal');
INSERT INTO find_duplicates VALUES(3, 'Roman', 'Nowak', 'Kierowca');
INSERT INTO find_duplicates VALUES(1, 'Jan', 'Kowalski', 'Kowal');
INSERT INTO find_duplicates VALUES(4, 'Ola', 'Pietrasik', 'Kucharz');
INSERT INTO find_duplicates VALUES(1, 'Jan', 'Kowalski', 'Kowal');
INSERT INTO find_duplicates VALUES(6, 'Wojtek', 'Marciniak', 'Ksiegowy');
INSERT INTO find_duplicates VALUES(2, 'Jan', 'Kowalski', 'Kowal');
INSERT INTO find_duplicates VALUES(1, 'Jan', 'Kowalski', 'Kowal');
INSERT INTO find_duplicates VALUES(4, 'Ola', 'Pietrasik', 'Kucharz');


SELECT * FROM find_duplicates;

Oracle - odnajdywanie duplikatów, powtórzeń wierszy / danych w tabeli

Poniższe zapytanie, wykonywane na wszystkich kolumnach, odnajdzie wszystkie powtarzające się i policzy ilość powtórzeń.

  SELECT col0, col1, col2, col3, count(*) count
    FROM find_duplicates
   WHERE (col0, col1, col2, col3) IN (  SELECT col0, col1, col2, col3
                                 FROM find_duplicates
                             GROUP BY col0, col1, col2, col3
                               HAVING COUNT (*) > 1)
GROUP BY col0, col1, col2, col3
  HAVING COUNT (*) > 1
  ;

Wykonane na naszym przykładowym zbiorze danych zwróci nam dwa poniższe wiersze:

Oracle - odnajdywanie duplikatów, powtórzeń wierszy / danych w tabeli

Zapytanie nie musi być oczywiście wykonywane na wszystkich kolumnach. Poniższy przykład pokazuje zapytanie i rezultat jego wykonania na dwóch kolumnach col0 i col3.

  SELECT col0, col3, count(*) count
    FROM find_duplicates
   WHERE (col0, col3) IN (  SELECT col0, col3
                                 FROM find_duplicates
                             GROUP BY col0, col3
                               HAVING COUNT (*) > 1)
GROUP BY col0, col3
  HAVING COUNT (*) > 1
  ;  

Oracle - odnajdywanie duplikatów, powtórzeń wierszy / danych w tabeli

 

wtorek, 02 kwietnia 2013, m0rt1m3r
Tagi: oracle plsql Sql

Related Posts Plugin for WordPress, Blogger...

Polecane wpisy





PowerBuilder Tetris
D - Tetris



Programowanie iOS

C# ToolBox

SQL / TSQL / PLSQL ToolBox

Linux / Unix ToolBox





Zaprzyjaznione Strony

Sprite Bandits

Cake Time