Maison > base de données > tutoriel mysql > Comment préserver l'intégrité des lignes lors de la copie de données entre des tables avec des contrôles en double ?

Comment préserver l'intégrité des lignes lors de la copie de données entre des tables avec des contrôles en double ?

DDD
Libérer: 2025-01-04 03:40:38
original
636 Les gens l'ont consulté

How to Preserve Row Integrity When Copying Data Between Tables with Duplicate Checks?

Préserver l'intégrité des lignes : copier des données avec des contrôles en double

Lorsque vous êtes confronté à la tâche de répliquer des données entre deux tables avec des schémas identiques, assurez-vous que les données l’intégrité devient primordiale. Un problème courant survient lorsque l'on tente de copier des lignes d'une table à une autre en ignorant les doublons. Examinons une solution pour relever ce défi.

Initialement, la solution proposée impliquait l'utilisation d'une clause WHERE avec une sous-requête pour filtrer les lignes en double :

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

Cependant, cette approche ne parvient pas à incorporer les critères qui définissent ce qui constitue un doublon. Pour résoudre ce problème, une clause WHERE supplémentaire est requise dans la sous-requête, spécifiant les critères de correspondance :

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 offre une solution plus concise :

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

Ceci L'approche identifie et insère les lignes de la table source qui n'ont pas de lignes correspondantes dans la table de destination en fonction de la jointure spécifiée clés.

De plus, si le problème réside dans des lignes en double potentielles dans la table source elle-même, une instruction distincte peut être utilisée :

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

Enfin, il est recommandé de répertorier les noms de champs spécifiques dans insérez des instructions plutôt que d'utiliser SELECT *, en garantissant que seuls les champs prévus sont copiés.

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