Heim > Datenbank > MySQL-Tutorial > Wie kann ich doppelte Einträge verhindern, wenn ich INSERT INTO SELECT in SQL Server verwende?

Wie kann ich doppelte Einträge verhindern, wenn ich INSERT INTO SELECT in SQL Server verwende?

Barbara Streisand
Freigeben: 2025-01-13 11:59:55
Original
1055 Leute haben es durchsucht

How Can I Prevent Duplicate Entries When Using INSERT INTO SELECT in SQL Server?

Vermeidung doppelter Daten mit INSERT INTO SELECT von SQL Server

Bei der Verwendung von INSERT INTO SELECT in SQL Server kann es leicht zu doppelten Einträgen kommen, wenn die Zieltabelle die einzufügenden Daten bereits enthält. Um dies zu verhindern, ist eine effiziente Filterung vor dem Einsetzen von entscheidender Bedeutung.

Lassen Sie uns dies anhand eines Beispiels veranschaulichen. Wir möchten Daten von Table1 in Table2 einfügen, aber doppelte IDs vermeiden:

<code>Table1:
----------
ID   Name
1    A
2    B
3    C

Table2:
----------
ID   Name
1    Z</code>
Nach dem Login kopieren

Die Verwendung von IF-ELSE-Anweisungen ist möglich, wird jedoch umständlich und erfordert mehrere INSERT INTO-Anweisungen.

Effiziente Lösungen: NOT EXISTS, NOT IN und LEFT JOIN

Effizientere Methoden nutzen NOT EXISTS, NOT IN und LEFT JOIN, um bereits vorhandene Daten in Table2 vor dem Einfügen herauszufiltern.

1. Mit NOT EXISTS:

Dieser Ansatz prüft vor dem Einfügen, ob jede Zeile von Table1 in Table2 vorhanden ist.

INSERT INTO TABLE_2 (Id, name)
SELECT t1.id, t1.name
FROM TABLE_1 t1
WHERE NOT EXISTS (SELECT id FROM TABLE_2 t2 WHERE t2.id = t1.id);
Nach dem Login kopieren

2. Mit NOT IN:

Ähnlich wie NOT EXISTS vergleicht NOT IN IDs und fügt nur Zeilen ein, in denen die ID nicht in Table2 gefunden wird.

INSERT INTO TABLE_2 (Id, name)
SELECT t1.id, t1.name
FROM TABLE_1 t1
WHERE t1.id NOT IN (SELECT id FROM TABLE_2);
Nach dem Login kopieren

3. Verwendung von LEFT JOIN mit IS NULL:

Ein LEFT JOIN identifiziert Zeilen in Table1, in denen eine Übereinstimmung in Table2 fehlt. IS NULLFilter für diese nicht übereinstimmenden Zeilen.

INSERT INTO TABLE_2 (Id, name)
SELECT t1.id, t1.name
FROM TABLE_1 t1
LEFT JOIN TABLE_2 t2 ON t2.id = t1.id
WHERE t2.id IS NULL;
Nach dem Login kopieren

Während alle drei Methoden das gleiche Ergebnis erzielen, NOT EXISTS bietet sie im Allgemeinen eine bessere Leistung, insbesondere bei großen Datensätzen, und ist daher der empfohlene Ansatz.

Das obige ist der detaillierte Inhalt vonWie kann ich doppelte Einträge verhindern, wenn ich INSERT INTO SELECT in SQL Server verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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