使用另一个mysql表更新mysql表

使用另一个mysql表更新mysql表,mysql,select,sql-update,inner-join,insert-into,Mysql,Select,Sql Update,Inner Join,Insert Into,我只想将不匹配的值从表2 tpl2复制到tpl1。正确的语法是什么?我使用更新内部联接,但从tpl1中删除值。我应该改用插入选择吗?见下文: tpl1 tpl2 tpl1 ------ ------- ------- col_1 col_1 col_1 1 1 ---> 1 2 2 2 3 3

我只想将不匹配的值从表2 tpl2复制到tpl1。正确的语法是什么?我使用更新内部联接,但从tpl1中删除值。我应该改用插入选择吗?见下文:

tpl1       tpl2             tpl1
------    -------          -------
col_1      col_1           col_1
1           1       --->     1
2           2                2
3           3                3
4           4                4
            5                5
            6                6
            7                7
您可以使用insert。选择:

如果你想防止重复,你也可以考虑这个方法。在tpl1col_1上创建唯一索引或约束:

然后简单地忽略任何已经存在的值。此忽略重复密钥更新时使用的方法:


分配不会更改表,因此结果是忽略重复项。

您可以使用INSERT IGNORE

INSERT IGNORE INTO tpl1 SELECT * FROM tpl2;

这意味着,当insert尝试将给定的行从tpl2复制到tpl1时,并且该行已经存在,也就是说,新行将与现有的主键值或唯一键值冲突,然后它将跳过该行。

您可以通过左键将tpl1连接到tpl2并仅插入tpl1中不存在的值来完成此操作

insert into tpl1 (col_1)
   select a.col_1 
   from tpl2 a
      left join tpl1 b using (col_1)
   where 
      b.col_1 is null;

+1为了方便快捷地理解您的查询,我喜欢@Bill我认为您的更新查询是错误的,她@user3247935不想像您的代码一样显示输出,您应该在本文[问题]中看到输出。你的输出像,她想要的输出像@Bill code…@jmail。您没有在tbl1上添加唯一索引。这是解决办法的一个重要部分。此方法与Bill的方法几乎相同,只是它具体说明了被忽略的错误。而且,我早了一分钟;。我尝试过没有唯一索引。。但是没有用,输出中没有任何更改…您的链接没有显示任何内容,它是空页面,就像没有代码一样。sqlfiddle.com/!2/a85fe8@jmail。我不知道为什么会这样。尝试:。或者,按照我的回答,在t1fn上添加create unique index t1_fn。
insert into tpl1(col_1)
    select col_1
    from tpl2
    on duplicate key update col_1 = tpl1.col_1;
INSERT IGNORE INTO tpl1 SELECT * FROM tpl2;
insert into tpl1 (col_1)
   select a.col_1 
   from tpl2 a
      left join tpl1 b using (col_1)
   where 
      b.col_1 is null;