假设table1为a,table2为b,它们都在不同的结构中,但是有相同的字段称为branch,我想将table2.branch
插入table1.branch
。
我已经尝试过了:
update a
set a.branch = b.branch
from table1 a
inner join table2 b
on a.table1id = b.table2id
where (b.asd = '1' or b.asd = '3')
and b.branch <> a.branch
Err Msg“列限定符或表B未定义。”
和这个
update table1 a join table2 b on a.id=b.id
set a.branch = b.branch
where a.something <> b.something
弹出column b not specified
我试过了两个,但没有人能做到。有没有人有建议如何更新SQL?
答案 0 :(得分:1)
DB2 for i遵循不允许联接更新的SQL标准。有关$('#insertForm').on('click', function(){
var form_intitule = $('input[name=form_intitule]').val();
if($('input[name=form_intitule]').val().trim().length == 0){
alert('fill the blank');
}
$.ajax({
type: "GET",
url: "lib/function.php?insertForm="+insertForm+"&form_intitule="+form_intitule,
dataType : "html",
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest + '--' + textStatus + '--' + errorThrown);
},
success:function(data){
}
});
});
这适用于大多数版本的DB2 for i
UPDATE
但是,上面的内容将使用table2中的相应值更新table1的每一行。如果table2中不存在某行,它将尝试使用NULL更新a.branch。如果a.branch不支持null,则会出错。有两种方法。
使用当前值
更新table1update table1 a
set a.branch = (select b.branch
from table2 b
where a.table1id = b.table2id
and b.asd = '1' or b.asd = '3'
)
或者只更新table1中在table2中匹配的行
update table1 a
set a.branch = coalesce((select b.branch
from table2 b
where a.table1id = b.table2id
and b.asd = '1' or b.asd = '3'
), a.branch)
如果您使用的是受支持的DB2 for i版本,则可以使用较新的MERGE语句。
update table1 a
set a.branch = (select b.branch
from table2 b
where a.table1id = b.table2id
and b.asd = '1' or b.asd = '3'
)
where exists (select *
from table2 b
where a.table1id = b.table2id
and b.asd = '1' or b.asd = '3'
)
答案 1 :(得分:0)
请尝试以下方法:
UPDATE table1
SET a.branch = b.branch
FROM table1 a
INNER JOIN table2 b
ON a.id = b.id
WHERE a.something <> b.something
希望这有帮助。
答案 2 :(得分:0)
尝试
update table1 set branch = b.branch
from table1 a
inner join table2 b
on a.table1id = b.table2id
where (b.asd = '1' or b.asd = '3')
and b.branch <> a.branch
需要更新表对象不应使用别名
答案 3 :(得分:0)
您可以使用触发器,因此当插入table2.branch时,它会自动添加到table1.branch
希望这有帮助