Maison > base de données > tutoriel mysql > Comment copier des lignes entre des tables sans créer de doublons ?

Comment copier des lignes entre des tables sans créer de doublons ?

DDD
Libérer: 2024-12-27 05:14:13
original
583 Les gens l'ont consulté

How to Copy Rows Between Tables Without Creating Duplicates?

Copier des lignes entre des tables sans dupliquer les données

Lors du transfert de données d'une table à une autre, il est crucial d'éviter l'insertion de lignes en double. Pour y parvenir, nous avons besoin d'une méthode qui filtre les enregistrements existants.

Dans votre approche initiale, vous avez tenté d'utiliser une clause WHERE avec une sous-requête pour identifier des lignes uniques. Cependant, la sous-requête manquait de critères pour déterminer les doublons.

Solution utilisant une sous-requête avec le filtrage WHERE

Pour filtrer efficacement les doublons, vous pouvez modifier votre sous-requête comme suit :

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 mise à jour ajoute une condition qui compare des champs spécifiques entre les tables source et de destination pour déterminer si un doublon existe.

Solution utilisant une jointure externe

Vous pouvez également utiliser une jointure externe pour obtenir le même résultat. Une jointure externe récupère toutes les lignes d'une table et les lignes correspondantes d'une autre table, laissant les lignes sans correspondance comme NULL.

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

Dans ce cas, la jointure externe fait correspondre les lignes en fonction de leurs champs clés (Key1, Key2, etc.). Les lignes de la table source qui ne correspondent à aucune ligne de la table de destination auront des valeurs NULL pour les champs clés, et ces lignes seront insérées dans la table de destination.

Considérations supplémentaires

Si vous souhaitez uniquement éviter les doublons à partir de la table source, vous pouvez utiliser un mot-clé distinct dans votre SELECT déclaration :

INSERT INTO destTable
SELECT Distinct field1,field2,field3,... 
FROM srcTable  
Copier après la connexion

Enfin, il est recommandé de spécifier les champs spécifiques dans votre instruction INSERT au lieu d'utiliser SELECT * pour des raisons de performances.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal