Ich habe die folgenden zwei Tabellen:
Table1
----------
ID Name
1 A
2 B
3 C
Table2
----------
ID Name
1 Z
Ich muss Daten von Table1
bis einfügen Table2
. Ich kann die folgende Syntax verwenden:
INSERT INTO Table2(Id, Name) SELECT Id, Name FROM Table1
In meinem Fall sind jedoch möglicherweise doppelte IDs vorhanden Table2
(in meinem Fall ist es nur " 1
"), und ich möchte diese nicht erneut kopieren, da dies einen Fehler auslösen würde.
Ich kann so etwas schreiben:
IF NOT EXISTS(SELECT 1 FROM Table2 WHERE Id=1)
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1
ELSE
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1 WHERE Table1.Id<>1
Gibt es einen besseren Weg, dies ohne Verwendung zu tun IF - ELSE
? Ich möchte zwei INSERT INTO-SELECT
Aussagen vermeiden , die auf einer bestimmten Bedingung beruhen.
sql
sql-server
tsql
sql-insert
Ashish Gupta
quelle
quelle
NOT EXISTS
ist besonders nützlich mit zusammengesetzten Primärschlüssel,NOT IN
funktioniert dann nichtIn MySQL können Sie dies tun:
Hat SQL Server etwas Ähnliches?
quelle
Ich hatte gerade ein ähnliches Problem, das Schlüsselwort DISTINCT wirkt magisch:
quelle
insert into
Tabelle enthalten sind.Ich hatte kürzlich das gleiche Problem ... Hier ist,
was in MS SQL Server 2017 für mich funktioniert hat ...
Der Primärschlüssel sollte für die ID in Tabelle 2 festgelegt werden ...
Die Spalten und Spalteneigenschaften sollten natürlich zwischen beiden gleich sein Tabellen. Dies funktioniert, wenn Sie das folgende Skript zum ersten Mal ausführen. Die doppelte ID in Tabelle 1 wird nicht eingefügt ...
Wenn Sie es das zweite Mal ausführen, erhalten Sie eine
Dies ist der Code:
quelle
Die Verwendung
ignore Duplicates
des von IanC vorgeschlagenen eindeutigen Index war meine Lösung für ein ähnliches Problem: Erstellen des Index mit der OptionWITH IGNORE_DUP_KEY
Ref.: Index_option
quelle
In SQL Server können Sie einen eindeutigen Schlüsselindex für die Tabelle festlegen für (Spalten, die eindeutig sein müssen).
quelle
Ein wenig abseits des Themas, aber wenn Sie die Daten in eine neue Tabelle migrieren möchten und die möglichen Duplikate in der Originaltabelle enthalten sind und die möglicherweise duplizierte Spalte keine ID ist, reicht
GROUP BY
Folgendes aus:quelle
Ein einfaches
DELETE
vor demINSERT
würde genügen:Wechsel
Table1
fürTable2
je nachdem , welchen TischId
undname
Paarung Sie erhalten wollen.quelle