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)
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.)
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
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
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!