Sql 如何将不同的记录从一个表附加到另一个表

Sql 如何将不同的记录从一个表附加到另一个表,sql,insert,distinct,Sql,Insert,Distinct,当主表可能有重复项时,如何仅将不同的记录从主表追加到另一个表。示例-我只想要较小表中的不同记录,但我需要将记录插入/追加到较小表中已有的记录中。您可以使用distinct关键字筛选重复项: insert into AnotherTable (col1, col2, col3) select distinct col1, col2, col3 from MasterTable 基于Microsoft SQL Server及其Transact-SQL。未始终进行测试,且目标_表的行数与源表的行数相

当主表可能有重复项时,如何仅将不同的记录从主表追加到另一个表。示例-我只想要较小表中的不同记录,但我需要将记录插入/追加到较小表中已有的记录中。

您可以使用
distinct
关键字筛选重复项:

insert into AnotherTable
(col1, col2, col3)
select distinct col1, col2, col3
from MasterTable

基于Microsoft SQL Server及其Transact-SQL。未始终进行测试,且目标_表的行数与源表的行数相同(否则在
INSERT-INTO
SELECT

INSERT INTO target_table
  SELECT DISTINCT row1, row2
  FROM source_table
  WHERE NOT EXISTS(
    SELECT row1, row2
    FROM target_table)

类似的内容适用于SQL Server(您没有提到您正在使用的RDBMS):


根据您的表格的“差异性”定义进行适当的调整。

忽略任何一致性问题:

insert into smaller (field, ... )
select distinct field, ... from bigger
except
select field, ... from smaller;
您还可以将其重新表述为联接:

insert into smaller (field, ... )
select distinct b.field, ... 
from bigger b
left join smaller s on s.key = b.key
where s.key is NULL

如果您不喜欢
不存在
除了
/
减去
(可爱,雷姆斯!),您还有
左加入
解决方案:

INSERT INTO smaller(a,b)
SELECT DISTINCT master.a, master.b FROM master
LEFT JOIN smaller ON smaller.a=master.a AND smaller.b=master.b
WHERE smaller.pkey IS NULL

你不会说问题的严重程度,所以我会提到我最近帮助一位朋友的一件事

他为一家保险公司工作,该公司为其他保险公司提供补充牙科和视力福利管理。当他们有了新客户时,他们也会得到一个新的数据库,该数据库可以有1000万条记录。他们想用1亿条主数据库中已有的数据识别所有可能的复制品f记录

我们提出的解决方案是确定字段值的两个不同组合(以各种方式进行规范化)这表明很有可能发生重复。然后,我们创建了一个新表,其中包含组合的MD5哈希值以及它们应用到的主记录的id。MD5列被索引。所有新记录都将计算它们的组合哈希值,如果其中任何一个与主记录发生冲突,新记录将被踢出EXEptions文件供一些人处理


这一速度让我们大吃一惊(以一种很好的方式),而且它的假阳性率也非常可以接受。

欢迎来到StackOverflow!第一个问题很好。您使用的是哪种数据库系统?MySQL、SQLServer?哇,从来没有这样想过!非常好
INSERT INTO smaller(a,b)
SELECT DISTINCT master.a, master.b FROM master
LEFT JOIN smaller ON smaller.a=master.a AND smaller.b=master.b
WHERE smaller.pkey IS NULL