Heim >Datenbank >MySQL-Tutorial >Wie kann ich doppelte Einträge verhindern, wenn ich INSERT INTO SELECT in SQL Server verwende?
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>
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.
<code class="language-sql">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);</code>
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.
<code class="language-sql">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);</code>
3. Verwendung von LEFT JOIN
mit IS NULL
:
Ein LEFT JOIN
identifiziert Zeilen in Table1
, in denen eine Übereinstimmung in Table2
fehlt. IS NULL
Filter für diese nicht übereinstimmenden Zeilen.
<code class="language-sql">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;</code>
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!