Méthodes pour éviter les données en double dans l'instruction INSERT INTO SELECT de SQL Server
Lors de l'utilisation de l'instruction INSERT INTO SELECT, il est important d'éviter l'insertion de données en double. Cet article décrit plusieurs méthodes efficaces pour éviter de tels problèmes dans SQL Server sans utiliser d'instructions conditionnelles telles que IF-ELSE.
Méthode 1 : Utiliser NON EXISTE
<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>
Cette requête empêche les insertions en double en vérifiant si un ID correspondant existe dans TABLE_2. S'il existe déjà, sautez cette ligne.
Méthode 2 : Utiliser 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>
Semblable à NOT EXISTS, la clause NOT IN exclut également les ID qui existent déjà dans TABLE_2. Il vérifie si l'ID dans TABLE_1 est dans TABLE_2 et l'insère uniquement s'il n'est pas présent.
Méthode 3 : Utiliser 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>
Utilisez LEFT JOIN et IS NULL pour identifier plus clairement les lignes qui doivent être insérées. Cette requête sélectionne et insère toutes les lignes de TABLE_1 qui n'ont pas d'ID correspondant dans TABLE_2.
Comparaison des performances
En termes de performances, LEFT JOIN/IS NULL n'est généralement pas aussi efficace que NOT EXISTS et NOT IN. En effet, LEFT JOIN nécessite d'analyser plus de tables et de lignes et consomme plus de ressources. Pour les ensembles de données volumineux, il est recommandé d’utiliser NOT EXISTS ou NOT IN.
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!