Heim > Datenbank > MySQL-Tutorial > Wie kann man Duplikate beim Einfügen von Daten mit INSERT INTO SELECT von SQL Server effizient vermeiden?

Wie kann man Duplikate beim Einfügen von Daten mit INSERT INTO SELECT von SQL Server effizient vermeiden?

Susan Sarandon
Freigeben: 2025-01-13 10:22:42
Original
158 Leute haben es durchsucht

How to Efficiently Avoid Duplicates When Inserting Data Using SQL Server's INSERT INTO SELECT?

SQL Server: Verhindern doppelter Datensätze während INSERT INTO SELECT

Das Einfügen von Daten aus einer Tabelle in eine andere in SQL Server erfordert sorgfältige Überlegungen, um doppelte Einträge zu vermeiden. Dies ist von entscheidender Bedeutung, wenn die Zieltabelle bereits potenziell widersprüchliche Daten enthält. Betrachten Sie dieses Beispiel:

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

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

Ein einfaches INSERT INTO SELECT würde aufgrund des Duplikats ID (1) scheitern. Bedingte IF-ELSE-Anweisungen sind zwar möglich, aber ineffizient und umständlich. Es gibt effizientere Alternativen:

Methode 1: Verwendung von NOT EXISTS

Dies ist im Allgemeinen der effizienteste Ansatz:

<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>
Nach dem Login kopieren

Es werden nur Zeilen aus Table1 eingefügt, in denen das ID noch nicht in Table2 vorhanden ist.

Methode 2: Verwendung von NOT IN

Diese Methode filtert Duplikate während des Auswahlprozesses:

<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>
Nach dem Login kopieren

Dieser Ansatz ist weniger effizient als NOT EXISTS, insbesondere bei großen Datensätzen.

Methode 3: Verwendung von LEFT JOIN und IS NULL

Dies ist normalerweise die am wenigsten effiziente Methode:

<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>
Nach dem Login kopieren

A LEFT JOIN identifiziert nicht übereinstimmende Zeilen; Es werden nur diejenigen mit einem NULL-Wert in Table2.id eingefügt.

Für eine optimale Leistung, insbesondere bei großen Datenmengen, wird die NOT EXISTS-Methode empfohlen. Vermeiden Sie den LEFT JOIN-Ansatz, es sei denn, andere Faktoren machen ihn vorzuziehen. Wählen Sie die Methode, die Ihren spezifischen Anforderungen und der Datensatzgröße am besten entspricht.

Das obige ist der detaillierte Inhalt vonWie kann man Duplikate beim Einfügen von Daten mit INSERT INTO SELECT von SQL Server effizient vermeiden?. 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