Suchen und löschen Sie doppelte Datensätze in einer Datenbank in PostgreSQL
- PostgreSQL-Datenbankschema
- Status der PostgreSQL-Datenbank
- Finden Sie doppelte Datensätze in PostgreSQL
- Löschen Sie doppelte Datensätze in PostgreSQL
- Abschluss
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:
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:
Hinweis: Wenn Sie Duplikate in der Spalte
sname
prüfen möchten, ersetzen Sie diese in der Abfrage durch die Spaltesname
. 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:
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:
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:
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:
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.
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