Maison > base de données > tutoriel mysql > Comment puis-je copier des lignes d'une table à une autre tout en évitant les doublons ?

Comment puis-je copier des lignes d'une table à une autre tout en évitant les doublons ?

Patricia Arquette
Libérer: 2024-12-28 03:06:09
original
428 Les gens l'ont consulté

How Can I Copy Rows from One Table to Another While Preventing Duplicates?

Copier des lignes dans une table en évitant les doublons

Le but est de transférer toutes les lignes d'une table (srcTable) à une autre (destTable) , à l'exclusion de toute entrée en double. Bien qu'il puisse sembler simple d'ajouter une clause WHERE avec une sous-requête qui filtre les doublons, cette approche peut échouer.

Problème de sous-requête :

La requête d'origine est la suivante :

INSERT INTO destTable
SELECT * FROM srcTable
WHERE NOT EXISTS(SELECT * FROM destTable)
Copier après la connexion

Cependant, cette requête n'insère aucune ligne car la sous-requête renvoie toutes les lignes de destTable, que ce soit ils correspondent à toutes les lignes de srcTable. Pour que la sous-requête fonctionne, elle doit inclure une condition supplémentaire pour identifier les lignes en double en fonction des champs pertinents.

Sous-requête révisée :

INSERT INTO destTable
SELECT Field1, Field2, Field3, ...
FROM srcTable
WHERE NOT EXISTS(SELECT *
                 FROM destTable
                 WHERE (srcTable.Field1 = DestTable.Field1 AND
                       srcTable.Field2 = DestTable.Field2 ... etc.))
Copier après la connexion

Cette sous-requête révisée compare des champs pour déterminer les doublons et les exclut de l'insertion.

Jointure externe Alternative :

Une autre approche consiste à utiliser une jointure externe :

INSERT INTO destTable
SELECT s.field1, s.field2, s.field3,...
FROM srcTable s 
LEFT JOIN destTable d ON (d.Key1 = s.Key1 AND d.Key2 = s.Key2 AND...)
WHERE d.Key1 IS NULL
Copier après la connexion

Cette technique de jointure externe filtre les lignes de srcTable qui ont des clés correspondantes dans destTable, en excluant les doublons lors de l'insertion. .

Adressage des doublons de la table source :

Si le Le problème est que sourceTable contient des lignes en double, la requête doit être modifiée pour sélectionner des lignes distinctes :

INSERT INTO destTable
SELECT DISTINCT Field1, Field2, Field3,...
FROM srcTable  
Copier après la connexion

Il est recommandé d'inclure des noms de champs spécifiques dans l'instruction INSERT plutôt que d'utiliser SELECT *.

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