Heim > Datenbank > MySQL-Tutorial > Wie lösche ich doppelte Zeilen aus einer PostgreSQL-Tabelle und behalte dabei eine eindeutige Spalte bei?

Wie lösche ich doppelte Zeilen aus einer PostgreSQL-Tabelle und behalte dabei eine eindeutige Spalte bei?

Mary-Kate Olsen
Freigeben: 2025-01-19 02:43:10
Original
113 Leute haben es durchsucht

How to Delete Duplicate Rows from a PostgreSQL Table While Preserving a Unique Column?

Doppelte Zeilen aus einer kleinen Tabelle mit eindeutigen Spalten entfernen

In PostgreSQL-Datenbanken kann die Eliminierung doppelter Zeilen die Datenintegrität verbessern und die Leistung optimieren. Nehmen wir an, Sie haben eine Tabelle, die uneingeschränkte Zeilen und doppelte Daten enthält, insbesondere in einer bestimmten Spalte namens „Schlüssel“. Das Ziel besteht darin, Duplikate zu entfernen und eine einzelne Instanz jedes eindeutigen „Schlüssel“-Werts beizubehalten.

Einzelne SQL-Befehlslösung

Um dies mit einem einzigen SQL-Befehl zu tun, können Sie die folgenden Schritte verwenden:

1. Identifizieren Sie das erste wiederholte Vorkommen: Zuerst müssen wir das erste Vorkommen jeder wiederholten Zeile identifizieren. Diese Informationen sind für die Aufbewahrung einer einzigen Kopie der Daten von entscheidender Bedeutung.

<code class="language-sql">SELECT MIN(ctid) AS ctid, key
FROM dups
GROUP BY key HAVING COUNT(*) > 1;</code>
Nach dem Login kopieren

2. Nicht-erstes Vorkommen löschen: Sobald das erste Vorkommen identifiziert ist, können wir alle nachfolgenden Duplikate basierend auf ihrem „ctid“-Wert entfernen. Die Spalte „ctid“ stellt die physische Position der Zeile in der Tabelle dar.

<code class="language-sql">DELETE FROM dups a USING (
    SELECT MIN(ctid) AS ctid, key
    FROM dups
    GROUP BY key HAVING COUNT(*) > 1
) b
WHERE a.key = b.key
AND a.ctid <> b.ctid;</code>
Nach dem Login kopieren

Zeilenreihenfolge berücksichtigen

Während diese Methode Duplikate effektiv entfernt, stellt sie nicht sicher, welche Zeile bei mehrfachem Vorkommen beibehalten wird. Wenn es bestimmte Kriterien für die Auswahl der zu behaltenden Zeilen gibt, sollten diese in die Abfrage einbezogen werden.

Beispiel:

Betrachten Sie zum besseren Verständnis das folgende Beispiel:

<code class="language-sql">CREATE TABLE people (
    name    VARCHAR(50) NOT NULL,
    surname VARCHAR(50) NOT NULL,
    age     INTEGER NOT NULL
);

INSERT INTO people (name, surname, age) VALUES
    ('A.', 'Tom', 30),
    ('A.', 'Tom', 10),
    ('B.', 'Tom', 20),
    ('B', 'Chris', 20);

-- 显示重复项的第一次出现:
SELECT MIN(ctid) AS ctid, name, surname
FROM people
GROUP BY (name, surname) HAVING COUNT(*) > 1;

-- 删除重复项的非第一次出现:
DELETE FROM people a USING (
    SELECT MIN(ctid) AS ctid, name, surname
    FROM people
    GROUP BY (name, surname) HAVING COUNT(*) > 1
) b
WHERE a.name = b.name
AND a.surname = b.surname
AND a.ctid <> b.ctid;

SELECT * FROM people;</code>
Nach dem Login kopieren

Diese Beispieltabelle enthält potenziell doppelte personenbezogene Daten. Nach der Ausführung der zweiten Abfrage werden die Duplikate entfernt und es verbleiben nur noch eindeutige Vor- und Nachnamen in der Tabelle.

Das obige ist der detaillierte Inhalt vonWie lösche ich doppelte Zeilen aus einer PostgreSQL-Tabelle und behalte dabei eine eindeutige Spalte bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage