在相同架构表中复制具有重复处理的行
您希望将行从表“srcTable”传输到“destTable”,同时防止重复。然而,在 WHERE 子句中使用子查询并不能有效地解决您的问题。
使用 WHERE 子句解决问题
错误在于缺乏适当的子查询中的子句用于识别重复项。在子查询中添加必要的条件,如下所示:
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.) )
使用外连接的替代方法
或者,考虑使用外连接以获得更简洁的解决方案:
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
处理源中的重复项表
如果您特别关心源表中的重复行,请考虑在插入语句中使用 unique 子句:
INSERT INTO destTable SELECT Distinct field1, field2, field3, ... FROM srcTable
其他建议
以上是如何有效地将行从一个表复制到另一个表,同时防止重复?的详细内容。更多信息请关注PHP中文网其他相关文章!