Maison > base de données > tutoriel mysql > Comment éviter efficacement les doublons lors de l'insertion de données à l'aide de INSERT INTO SELECT de SQL Server ?

Comment éviter efficacement les doublons lors de l'insertion de données à l'aide de INSERT INTO SELECT de SQL Server ?

Susan Sarandon
Libérer: 2025-01-13 10:22:42
original
162 Les gens l'ont consulté

How to Efficiently Avoid Duplicates When Inserting Data Using SQL Server's INSERT INTO SELECT?

SQL Server : prévenir les enregistrements en double pendant INSERT INTO SELECT

L'insertion de données d'une table à une autre dans SQL Server nécessite une attention particulière pour éviter les entrées en double. Ceci est crucial lorsque la table de destination contient déjà des données potentiellement conflictuelles. Prenons cet exemple :

<code>Table1
----------
ID   Name
1    A
2    B
3    C

Table2
----------
ID   Name
1    Z</code>
Copier après la connexion

Un simple INSERT INTO SELECT échouerait à cause du double ID (1). Bien que les instructions conditionnelles IF-ELSE soient possibles, elles sont inefficaces et lourdes. Des alternatives plus efficaces existent :

Méthode 1 : Utilisation de NOT EXISTS

C'est généralement l'approche la plus efficace :

<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>
Copier après la connexion

Seules les lignes de Table1 où le ID n'existe pas déjà dans Table2 sont insérées.

Méthode 2 : Utilisation de NOT IN

Cette méthode filtre les doublons pendant le processus de sélection :

<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>
Copier après la connexion

Cette approche est moins efficace que NOT EXISTS, en particulier avec de grands ensembles de données.

Méthode 3 : Utiliser LEFT JOIN et IS NULL

C'est généralement la méthode la moins efficace :

<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>
Copier après la connexion

A LEFT JOIN identifie les lignes sans correspondance ; seuls ceux avec une valeur NULL dans Table2.id sont insérés.

Pour des performances optimales, notamment avec des ensembles de données volumineux, la méthode NOT EXISTS est recommandée. Évitez l’approche LEFT JOIN à moins que d’autres facteurs ne la rendent préférable. Choisissez la méthode qui correspond le mieux à vos besoins spécifiques et à la taille de votre ensemble de données.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal