Maison > base de données > tutoriel mysql > Comment puis-je copier des lignes entre des tables tout en évitant les entrées en double ?

Comment puis-je copier des lignes entre des tables tout en évitant les entrées en double ?

DDD
Libérer: 2025-01-03 08:57:40
original
788 Les gens l'ont consulté

How Can I Copy Rows Between Tables While Preventing Duplicate Entries?

Copier des lignes entre des tables en ignorant les doublons

Lorsque vous travaillez avec plusieurs tables, il est souvent nécessaire de copier des lignes entre elles. Cependant, il est crucial d'empêcher l'insertion de lignes en double. La discussion suivante aborde le problème d'un utilisateur lié à la mise en œuvre de cette tâche.

Initialement, l'utilisateur a tenté d'utiliser une clause WHERE avec une sous-requête pour identifier les lignes non en double. Cependant, cette approche n’a donné aucun résultat. Le remplacement de la clause WHERE par un filtrage par clé secondaire a également été envisagé, mais cela s'est avéré irréalisable étant donné la présence de plusieurs clés.

Une solution viable consiste à modifier la sous-requête pour inclure un prédicat qui identifie les lignes en double en fonction de critères spécifiques. Cela garantit que seules des lignes uniques sont insérées.

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

Alternativement, une jointure externe peut être utilisée pour une plus grande concision :

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

Ces approches résolvent le problème des lignes en double dans la destination. tableau. Si toutefois le problème concerne les lignes en double dans la table source, la requête suivante peut être utilisée :

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

Enfin, il est recommandé de lister explicitement les champs dans l'instruction INSERT plutôt que de s'appuyer sur le * caractère générique pour garantir l’intégrité des 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal