Maison > base de données > tutoriel mysql > Comment puis-je empêcher les entrées en double lors de l'utilisation de INSERT INTO SELECT dans SQL Server ?

Comment puis-je empêcher les entrées en double lors de l'utilisation de INSERT INTO SELECT dans SQL Server ?

Barbara Streisand
Libérer: 2025-01-13 11:59:55
original
994 Les gens l'ont consulté

How Can I Prevent Duplicate Entries When Using INSERT INTO SELECT in SQL Server?

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

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

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

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

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!

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