使用另一个mysql表更新mysql表
我只想将不匹配的值从表2 tpl2复制到tpl1。正确的语法是什么?我使用更新内部联接,但从tpl1中删除值。我应该改用插入选择吗?见下文:使用另一个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
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;