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
Barbara StreisandOriginal
2025-01-13 11:59:55992Durchsuche

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>

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 NULLFilter 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!

Stellungnahme:
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