MYSQL更新如果不存在则别无效

时间:2014-05-19 08:50:43

标签: mysql

我的问题是,如果表中的值不存在于另一个表中,我如何更新表。我检查了INSERT ... ON DUPLICATE KEY UPDATE  但它描述了插入更新但不插入的内容。

我的情况就像,我有两张桌子说(t1,t2)。我想在t1中更新一个列,如果它在t2中不存在则更新。否则递增值并再次尝试更新。  所以我想要像

这样的东西
update t1 set column = 'value' if it does not exists in t2

有人可以建议解决方案

1 个答案:

答案 0 :(得分:0)

以下是使用JOIN进行此操作的方法。

create table tab1 (id int , val int);
insert into tab1 values (1,1),(2,3),(3,5);

create table tab2 (id int , val int);
insert into tab2  values (4,1),(2,3),(3,5);

在tab2中不可用的上述tab1(id = 1)中,使用以下命令我们可以更新这些值

update tab1 t1
left join tab2 t2 on t1.id = t2.id 
set t1.val = 
  case 
    when t2.id IS NULL then  8 
    else t1.val
  end

更新命令后的输出看起来像

mysql> select * from tab1 ;
+------+------+
| id   | val  |
+------+------+
|    1 |    8 |
|    2 |    3 |
|    3 |    5 |
+------+------+

你也可以使用EXIST,这也比做左连接

update tab1 t1 set t1.val = 10
where NOT EXISTS
(
  select 1
  from tab2 where tab2.id = t1.id
)