如何使用消除重复的联接从另一个表中插入一个表[重复]

Posted

技术标签:

【中文标题】如何使用消除重复的联接从另一个表中插入一个表[重复]【英文标题】:How to insert in one table from another table by using Join that eliminates duplicates [duplicate] 【发布时间】:2018-07-10 12:40:44 【问题描述】:

我创建了一个表 AB 具有完全相同的列:

create or replace table a (
    a1 varchar(30),
    a2 int,
    a3 int
);

create or replace table b (
    b1 varchar(30),
    b2 int,
    b3 int
);

然后在每个中插入2个值:

insert into a values ('abc', 1, 2);
insert into a values ('abd', 1, 2);

insert into b values ('abd', 1, 2);
insert into b values ('abe', 1, 2);

如何制作插入语句,以便它只插入来自B 且在表A 中不存在的记录(例如,使用连接语句?)?

insert into table a (
    select * from b
    );

(没有主键帮助)。 奖励点是仅检查 2 列是否相同(例如 a1 != b1a2 != b2)。

谢谢!

【问题讨论】:

澄清一下:在给出的示例中,您希望将行 'abe', 1, 2 插入到表 a 中? 【参考方案1】:

这应该可以满足您的需求:

insert into a 
select b.*
from b left join  a on a.a1 = b.b1 and a.a2 = b.b2
where a.a1 is null 

【讨论】:

这也很有效。谢谢...【参考方案2】:

我会使用not exists

insert into a (a1, a2, a3)
     select b1, b2, b3
     from b 
     where not exists (select 1 from a where a1 = b.b1 and a2 = b.b2);

【讨论】:

成功了,谢谢...【参考方案3】:

试试这个

insert int a
select * from b
where (b1, b2, b3) not in (select a1, a2, a3 from a)

【讨论】:

这也很有效。谢谢...

以上是关于如何使用消除重复的联接从另一个表中插入一个表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL从另一个表更新数据,如果存在,否则插入[重复]

oracle查询出来的数据如何消除重复数据

仅从另一个联接表中选择第一行

从另一个表中选择具有数据计数的数据[重复]

如何在插入 MySQL 之前检查表中是不是存在名称 [重复]

使用php脚本检查一个表中的重复记录并重复记录插入到另一个表中