Home >Database >Mysql Tutorial >How to Preserve Row Integrity When Copying Data Between Tables with Duplicate Checks?
Preserving Row Integrity: Copying Data with Duplicate Checks
When faced with the task of replicating data between two tables with identical schemas, ensuring data integrity becomes paramount. One common issue arises when attempting to copy rows from one table to another while ignoring duplicates. Let's delve into a solution to address this challenge.
Initially, the proposed solution involved using a WHERE clause with a subquery to filter out duplicate rows:
INSERT INTO destTable SELECT * FROM srcTable WHERE NOT EXISTS(SELECT * FROM destTable)
However, this approach fails to incorporate the criteria that defines what constitutes a duplicate. To rectify this issue, an additional WHERE clause is required within the subquery, specifying the matching criteria:
WHERE NOT EXISTS(SELECT * FROM destTable WHERE (srcTable.Field1=destTable.Field1 and SrcTable.Field2=DestTable.Field2...etc.)
Alternatively, an outer join offers a more concise solution:
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
This approach identifies and inserts rows from the source table that do not have matching rows in the destination table based on the specified join keys.
Moreover, if the concern lies in potential duplicate rows within the source table itself, a distinct statement can be employed:
INSERT INTO destTable SELECT Distinct field1,field2,field3,... FROM srcTable
Finally, it's recommended to list specific field names in insert statements rather than using SELECT *, ensuring that only intended fields are copied.
The above is the detailed content of How to Preserve Row Integrity When Copying Data Between Tables with Duplicate Checks?. For more information, please follow other related articles on the PHP Chinese website!