在表之间复制行并忽略重复项
使用多个表时,通常需要在它们之间复制行。但是,防止插入重复行至关重要。以下讨论解决了用户在实现此任务时遇到的问题。
最初,用户尝试使用带有子查询的 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
这些方法解决了目标中重复行的问题桌子。但是,如果担心源表中的重复行,则可以使用以下查询:
INSERT INTO destTable SELECT Distinct field1,field2,field3,... FROM srcTable
最后,建议在 INSERT 语句中显式列出字段,而不是依赖 *通配符以确保数据完整性。
以上是如何在表之间复制行同时防止重复条目?的详细内容。更多信息请关注PHP中文网其他相关文章!