Éviter les données en double avec INSERT INTO SELECT de SQL Server
Lors de l'utilisation de INSERT INTO SELECT
dans SQL Server, des entrées en double peuvent facilement survenir si la table cible contient déjà les données en cours d'insertion. Pour éviter cela, un filtrage efficace est crucial avant l'insertion.
Illustrons avec un exemple. Nous voulons insérer les données de Table1
dans Table2
, mais éviter les identifiants en double :
<code>Table1: ---------- ID Name 1 A 2 B 3 C Table2: ---------- ID Name 1 Z</code>
L'utilisation des instructions IF-ELSE
est possible, mais devient lourde et nécessite plusieurs instructions INSERT INTO
.
Solutions efficaces : NOT EXISTS
, NOT IN
et LEFT JOIN
Des méthodes plus efficaces utilisent NOT EXISTS
, NOT IN
et LEFT JOIN
pour filtrer les données préexistantes dans Table2
avant l'insertion.
1. Utilisation de NOT EXISTS
:
Cette approche vérifie l'existence de chaque ligne de Table1
dans Table2
avant de l'insérer.
<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. Utilisation de NOT IN
:
Semblable à NOT EXISTS
, NOT IN
compare les identifiants, en insérant uniquement les lignes où l'identifiant n'est pas trouvé dans Table2
.
<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. Utiliser LEFT JOIN
avec IS NULL
:
Un LEFT JOIN
identifie les lignes dans Table1
sans correspondance dans Table2
. IS NULL
filtre pour ces lignes sans correspondance.
<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>
Bien que les trois méthodes aboutissent au même résultat, NOT EXISTS
offre généralement des performances supérieures, en particulier avec de grands ensembles de données, et constitue donc l'approche recommandée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!