首页 > 数据库 > mysql教程 > 如何将行从一个表复制到另一个表,同时防止重复?

如何将行从一个表复制到另一个表,同时防止重复?

Patricia Arquette
发布: 2024-12-28 03:06:09
原创
428 人浏览过

How Can I Copy Rows from One Table to Another While Preventing Duplicates?

将行复制到表中同时避免重复

目标是将所有行从一个表 (srcTable) 传输到另一个表 (destTable) ,排除任何重复的条目。虽然添加带有过滤掉重复项的子查询的 WHERE 子句似乎很简单,但这种方法可能会失败。

子查询问题:

原始查询如下:

INSERT INTO destTable
SELECT * FROM srcTable
WHERE NOT EXISTS(SELECT * FROM destTable)
登录后复制

但是,此查询不会插入任何行,因为子查询返回 destTable 中的所有行,无论是否它们匹配 srcTable 中的任何行。要使子查询正常工作,它必须包含一个附加条件来根据相关字段识别重复行。

修订后的子查询:

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
登录后复制

此外连接技术从 srcTable 中过滤掉在 destTable 中具有匹配键的行,并在插入期间排除重复项.

寻址源表重复项:

如果担心 sourceTable 包含重复行,则应修改查询以选择不同的行:

INSERT INTO destTable
SELECT DISTINCT Field1, Field2, Field3,...
FROM srcTable  
登录后复制

建议在 INSERT 语句中包含特定字段名称优于使用 SELECT *.

以上是如何将行从一个表复制到另一个表,同时防止重复?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板