J'ai les deux tableaux suivants:
Table1
----------
ID Name
1 A
2 B
3 C
Table2
----------
ID Name
1 Z
J'ai besoin d'insérer des données de Table1
à Table2
. Je peux utiliser la syntaxe suivante:
INSERT INTO Table2(Id, Name) SELECT Id, Name FROM Table1
Cependant, dans mon cas, des identifiants en double peuvent exister dans Table2
(dans mon cas, c'est juste " 1
") et je ne veux pas copier à nouveau car cela générerait une erreur.
Je peux écrire quelque chose comme ça:
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
Existe-t-il une meilleure façon de faire cela sans utiliser IF - ELSE
? Je veux éviter deux INSERT INTO-SELECT
déclarations basées sur une condition.
sql
sql-server
tsql
sql-insert
Ashish Gupta
la source
la source
NOT EXISTS
est particulièrement utile avec la clé primaire composite,NOT IN
ne fonctionnera pas alorsDans MySQL, vous pouvez faire ceci:
SQL Server a-t-il quelque chose de similaire?
la source
Je viens d'avoir un problème similaire, le mot clé DISTINCT fonctionne par magie:
la source
insert into
tableau.J'étais confronté au même problème récemment ...
Voici ce qui a fonctionné pour moi dans MS SQL Server 2017 ...
La clé primaire doit être définie sur l'ID dans le tableau 2 ...
Les colonnes et les propriétés de colonne doivent être les mêmes bien sûr entre les deux les tables. Cela fonctionnera la première fois que vous exécuterez le script ci-dessous. L'ID dupliqué dans le tableau 1 ne sera pas inséré ...
Si vous l'exécutez la deuxième fois, vous obtiendrez un
Voici le code:
la source
L'utilisation
ignore Duplicates
de l'index unique suggéré par IanC était ma solution pour un problème similaire, la création de l'index avec l'optionWITH IGNORE_DUP_KEY
Réf.: Index_option
la source
À partir de SQL Server, vous pouvez définir un index de clé unique sur la table pour (colonnes qui doivent être uniques)
la source
Un peu hors sujet, mais si vous souhaitez migrer les données vers une nouvelle table, et que les doublons possibles sont dans la table d'origine , et que la colonne éventuellement dupliquée n'est pas un identifiant, ça
GROUP BY
fera:la source
Un simple
DELETE
avant leINSERT
suffirait:Changement
Table1
enTable2
fonction de la tableId
et de l'name
appariement que vous souhaitez conserver.la source