Heim > Datenbank > MySQL-Tutorial > Wie vermeide ich doppelte Zeilen in SQL Servers INSERT INTO SELECT ohne IF-ELSE-Anweisungen?

Wie vermeide ich doppelte Zeilen in SQL Servers INSERT INTO SELECT ohne IF-ELSE-Anweisungen?

Susan Sarandon
Freigeben: 2025-01-13 10:58:43
Original
429 Leute haben es durchsucht

How to Avoid Duplicate Rows in SQL Server's INSERT INTO SELECT Without IF-ELSE Statements?

Methoden zur Vermeidung doppelter Daten in der SQL Server INSERT INTO SELECT-Anweisung

Bei Verwendung der INSERT INTO SELECT-Anweisung ist es wichtig, das doppelte Einfügen von Daten zu verhindern. In diesem Artikel werden mehrere effektive Möglichkeiten beschrieben, solche Probleme in SQL Server zu vermeiden, ohne bedingte Anweisungen wie IF-ELSE zu verwenden.

Methode 1: Verwenden Sie NOT EXISTS

<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

Diese Abfrage verhindert doppelte Einfügungen, indem sie prüft, ob in TABLE_2 eine passende ID vorhanden ist. Wenn es bereits vorhanden ist, überspringen Sie diese Zeile.

Methode 2: Verwenden Sie NOT IN

<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

Ähnlich wie NOT EXISTS schließt die NOT IN-Klausel auch IDs aus, die bereits in TABLE_2 vorhanden sind. Es prüft, ob die ID in TABLE_1 in TABLE_2 vorhanden ist und fügt nur ein, wenn sie nicht vorhanden ist.

Methode 3: Verwenden Sie LEFT JOIN/IS NULL

<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

Verwenden Sie LEFT JOIN und IS NULL, um die Zeilen, die eingefügt werden müssen, klarer zu identifizieren. Diese Abfrage wählt alle Zeilen in TABLE_1 aus und fügt sie ein, die keine passende ID in TABLE_2 haben.

Leistungsvergleich

In Bezug auf die Leistung ist LEFT JOIN/IS NULL im Allgemeinen nicht so effizient wie NOT EXISTS und NOT IN. Dies liegt daran, dass LEFT JOIN das Scannen von mehr Tabellen und Zeilen erfordert und mehr Ressourcen verbraucht. Für große Datenmengen empfiehlt sich die Verwendung von NOT EXISTS oder NOT IN.

Das obige ist der detaillierte Inhalt vonWie vermeide ich doppelte Zeilen in SQL Servers INSERT INTO SELECT ohne IF-ELSE-Anweisungen?. 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