一张表部分UPDATE到另一张表,报错无法更新,报错1407值为NULL。
求教大神,现在我有表a和表b,要把a更新到b里去,并实现:
Request 1: 当且仅当a.ID=b.ID, a.ID_TIME=b.ID_TIME时才将a某行的VALUE更新到b的对应行;
Request 2: 如果a某行的ID和ID_TIME是b里没有的,那么这一行数据不更新到表b;
Request 3: 如果b某行的ID和ID_TIME是a里没有的,那么表b的该行不更新,维持原状。
=============================================================================
例子:
a
ID ID_TIME VALUE
1 2017-06-07 10
2 2017-06-07 20
1 2017-06-08 30
2 2017-06-08 40
a表约束条件是VALUE不能为NULL。
b
ID ID_TIME VALUE
1 2017-06-07 100
2 2017-06-07 110
3 2017-06-09 300
b表约束条件是VALUE不能为NULL。
在这个例子里,a的ROW1和ROW2会更新到b里,ROW3和ROW4不会更新到b里,表b的ROW3不会改变,即结果能实现:
b
ID ID_TIME VALUE
1 2017-06-07 10
2 2017-06-07 20
3 2017-06-09 300
我自己尝试了如下方法,报了错。
尝试:
update b set value= (select value from a where a.id= b.id and a.id_time= b.id_time)
结果报错,提示:SQL错误[1407]: ORA-01407: 无法更新,("B"."VALUE")为NULL
我考虑了下,应该是表b的第三行在表a中没有找到,会赋给表b的第三行一个NULL,和约束冲突了。我想要的效果是第三行既然在表a中没找到,就不更新。
是不是还要加上什么约束才可以?比如用exists,或者是inner join?请大神不吝赐教!