Suchen und löschen Sie doppelte Datensätze in einer Datenbank in PostgreSQL

Bilal Shahid 20 Juni 2023
  1. PostgreSQL-Datenbankschema
  2. Status der PostgreSQL-Datenbank
  3. Finden Sie doppelte Datensätze in PostgreSQL
  4. Löschen Sie doppelte Datensätze in PostgreSQL
  5. Abschluss
Suchen und löschen Sie doppelte Datensätze in einer Datenbank in PostgreSQL

Dieser Artikel beschreibt das Finden und Löschen doppelter Datensätze in PostgreSQL mit verschiedenen Befehlen.

Es können zahlreiche Abfragen geschrieben und verwendet werden, um nach doppelten Datensätzen in der Datenbank zu suchen. Dieselben Abfragen können dann optimiert werden, um die doppelten Datensätze in der Datenbank zu löschen.

Einige der Abfragen werden unten erwähnt, um Ihnen bei der Suche nach doppelten Datensätzen zu helfen. Es gibt verschiedene alternative Abfragen für denselben Zweck, sodass Sie weiter experimentieren und neue Lösungen finden können.

PostgreSQL-Datenbankschema

Ein unten entworfenes Schema wird im gesamten Artikel befolgt, damit Sie sich nur auf die Abfragen konzentrieren können. Alle Abfragen sind gemäß dem Schema entworfen, um die Funktionsweise der Abfragen besser zu verstehen.

CREATE TABLE Student (
    sid INT PRIMARY KEY,
    sname VARCHAR (50),
    sage INT,
    semail VARCHAR(80)
);

Status der PostgreSQL-Datenbank

Die folgenden Datensätze werden der Tabelle Student hinzugefügt, um sie mit Datensätzen zu füllen.

INSERT INTO Student VALUES (1, 'A', 15, 'a@gmail.com');
INSERT INTO Student VALUES (2, 'A', 17, 'ab@gmail.com');
INSERT INTO Student VALUES (3, 'B', 17, 'b@gmail.com');
INSERT INTO Student VALUES (4, 'AB', 21, 'ab@gmail.com');

Das Datenbankschema und der Status zeigen deutlich, dass nur die Spalte sid in der Tabelle eindeutig ist; Andernfalls können alle Spalten doppelte Datensätze enthalten.

Nachfolgend ist der Zustand der Tabelle Student nach erfolgreichem Einfügen aller Datensätze dargestellt:

Studentenstaat

Doppelte Werte in sname, sage und semail sind zu sehen.

Finden Sie doppelte Datensätze in PostgreSQL

Ein Fehler wird generiert, wenn Sie eine Eindeutigkeitsbeschränkung auf eine Spalte anwenden, die bereits doppelte Datensätze enthält. Es ist wichtig, verschiedene Datensätze zu haben, um später eine eindeutige Einschränkung auf dieses Attribut anzuwenden.

Es kann mehrere andere Gründe geben, doppelte Datensätze zu finden. Sie können Abfragen in PostgreSQL schreiben, um doppelte Datensätze herauszufiltern.

Hier sind die folgenden Abfragen:

Abfrage 1

Eine sehr einfache Abfrage, die Ihnen helfen kann, doppelte Datensätze zu finden, lautet wie folgt:

SELECT sname, count(*)
FROM Student
GROUP BY sname
HAVING count(*) >1

Die obige Abfrage ist ziemlich einfach. Es gruppiert die Daten nach der Spalte sname und zeigt an, wie oft es einen Schüler mit demselben Namen findet.

Das Abfrageergebnis lautet wie folgt:

PostgreSQL Duplikate finden – Abfrage 1

Hinweis: Wenn Sie Duplikate in der Spalte sname prüfen möchten, ersetzen Sie diese in der Abfrage durch die Spalte sname. Wenn Sie außerdem einen doppelten Datensatz mit demselben Namen und Alter finden möchten, fügen Sie beide Spalten zur Abfrage hinzu.

Abfrage 2

Wenn Sie mit verschachtelten Abfragen vertraut sind, könnte dies eine einfache Lösung für Sie sein, um nach doppelten Werten zu suchen. Es ist eine ähnliche Abfrage wie die oben geschriebene; Es enthält jedoch das Konzept verschachtelter Abfragen:

SELECT *
FROM Student ou
WHERE (
    SELECT count(*)
    FROM Student inr
    WHERE inr.sname = ou.sname
) > 1

Die Abfrage liefert das gleiche Ergebnis wie erwartet. Es zeigt den gesamten Datensatz des sname an, der doppelte Datensätze enthält.

Wenn Sie doppelte Datensätze in anderen Attributen finden möchten, können Sie das sname in der obigen Abfrage durch das Attribut Ihrer Wahl ersetzen.

Das aus der Abfrage generierte Ergebnis lautet wie folgt:

PostgreSQL Duplikate finden – Abfrage 2

Abfrage 3

Um ganze doppelte Datensätze zu finden, die in jedem Attribut denselben Wert haben, ist hier eine einfache Abfrage:

SELECT (Student.*)::text, count(*)
FROM Student
GROUP BY Student.*
HAVING count(*) > 1

Die obige Abfrage übernimmt alle Attribute. In diesem Fall nimmt es sid, sname, sage und semail und zählt, wie oft derselbe Datensatz mit genauen Werten in allen Attributen wiederholt wird.

In diesem Schema ist das Attribut sid der Primärschlüssel; daher erlaubt es keine vollständige Duplizierung von Aufzeichnungen. Daher erzeugt die Abfrage kein Ergebnis:

PostgreSQL Duplikate finden – Abfrage 3

Abfrage 4

Eine weitere Abfrage, die verwendet werden kann, um doppelte Datensätze in einer bestimmten Tabelle zu finden, wird unten erwähnt:

SELECT *
FROM (
    SELECT sname, sage, semail, ROW_NUMBER() OVER
        (
        PARTITION BY sname
        ORDER BY sname, sage, semail ASC
        ) AS Row FROM Student
    ) dups
WHERE dups.Row >1

Dies ist eine verschachtelte Abfrage, die doppelte Zeilen findet und sname, sage und semail der doppelten Datensätze anzeigt. Das Abfrageergebnis lautet wie folgt:

PostgreSQL Duplikate finden – Abfrage 4

Löschen Sie doppelte Datensätze in PostgreSQL

Nachdem Sie die doppelten Datensätze gefunden haben, möchten Sie sie möglicherweise aus der Tabelle löschen. Mehrere Abfragen können verwendet werden, um doppelte Datensätze zu löschen; Dieser Artikel enthält jedoch nur eine solche Abfrage.

Abfrage 1

Die vier oben genannten Abfragen können durch Optimierung verwendet werden, um doppelte Datensätze zu löschen. Als Übung können Sie selbst mit diesen Abfragen experimentieren.

Wir haben eine weitere Abfrage hinzugefügt, um die doppelten Datensätze aus der Tabelle in diesem Artikel zu löschen.

DELETE
FROM Student s1
USING Student s2
WHERE s1.sname = s2.sname AND s1.sid < s2.sid

Die obige Abfrage löscht einen Datensatz aus der Tabelle Student mit dem Namen A. Die Abfrage löscht alle Datensätze außer dem letzten und generiert eine Erfolgsmeldung.

Der Zustand der Tabelle nach dem Löschen ist unten zu sehen:

PostgreSQL löscht Duplikate

Abschluss

Zahlreiche Abfragen können verwendet werden, um doppelte Datensätze in einer Datenbank zu finden. Wenn Sie diese Abfragen optimieren, können Sie auch diese Datensätze löschen.

Experimentieren Sie weiter mit verschiedenen Abfragen, um die beste zu finden, die Ihren Anforderungen entspricht.

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

Verwandter Artikel - PostgreSQL Database